📜  MySQL VARCHAR

📅  最后修改于: 2020-11-19 02:04:14             🧑  作者: Mango

MySQL的VARCHAR

MySQL中的Varchar是用于存储文本的数据类型,其长度最多可包含65535个字符。表中的varchar列是可变长度的字符串,可以容纳数字或字符或两者兼有。此数据类型在版本5.0.3之前只能存储255个字符,但在此版本及更高版本中,最多可以存储65535个字符。它可以以1字节或2字节长的前缀加上实际大小的形式存储在MySQL中。

长度前缀指定字符串值的字节长度,而不是我们设置的最大大小。如果值不需要超过255个字节,则列使用长度前缀加一个字节。如果值需要超过255个字节,则列将使用长度前缀加两个字节。

MySQL中VARCHAR的最大长度取决于65,535字节的最大行大小,除TEXT / BLOB列和所使用的字符集外,所有列均共享该最大行大小。这意味着总列不得超过65535个字节。

让我们借助示例了解它。

我们将创建两个表并将其命名为Test1和Test2。两个表都包含两个名为T1和T2的列。执行以下语句以创建表“ Test1”:

CREATE TABLE Test1 (
    T1 VARCHAR(32765) NOT NULL,
    T2 VARCHAR(32766) NOT NULL
)  CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;

上面的语句成功创建了一个表,因为列长度T1 = 32765 + 2个字节,T2 = 32766 + 2个字节等于65535(32765 + 2 + 32766 + 2)。因此,列长度满足varchar的最大行大小,即65535。

现在,我们将看到如果列大小超过varchar 65535的最大大小会发生什么。执行以下语句,在此我们增加了列T1的大小以创建表Test2:

CREATE TABLE Test2 (
    T1 VARCHAR(32770) NOT NULL,
    T2 VARCHAR(32766) NOT NULL
)  CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;

执行上述语句后,MySQL会产生错误。这意味着最大行大小不能超过65,535字节。在任何情况下,如果增加,则该语句将失败,并且MySQL将生成错误。

在另一种情况下,假设我们使用以下语句创建了一个名为Test3的表:

CREATE TABLE Test3 (
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(5) NOT NULL
);

接下来,使用以下语句将值插入表中:

INSERT INTO Test3(Name) VALUES ('Stephen');

现在,执行上面的语句。 MySQL给出错误消息:行1的“名称”列的数据太长。输出更清楚地说明了这一点。

MySQL VARCHAR和空格

当存储varchar值时,MySQL不会填充空间。当它们存储或检索varchar值时,MySQL还保留了尾随空格。我们可以通过以下示例来理解它,在该示例中,insert语句在表Test3的“名称”列中添加值:

INSERT INTO Test3(Name) VALUES ('John ');

接下来,执行SELECT语句以检索值。

SELECT Id, Name, length(Name) FROM Test3;

它将给出以下输出,其中MySQL在长度计数中包括了尾随空格,因为它不会增加列的长度。

但是,当我们尝试插入一个varchar值且尾随空格超过列长度时,MySQL将截断尾随空格。另外,MySQL发出警告。以下示例对其进行了更清晰的说明:

INSERT INTO Test3(Name) VALUES ('Peter ');

上面的语句在name列中插入一个长度为6的值。该值仍插入列中,但是MySQL在添加该值之前会截断尾随空格。我们可以使用以下查询进行验证,在该查询中我们可以看到成功添加了insert语句,但带有以下警告:数据在第1行的“名称”列被截断了:

Char和Varchar数据类型之间的区别

char和varchar数据类型都遵循ASCII字符。它们几乎相同,但是在存储和从数据库检索数据方面有所不同。下表总结了char和varchar数据类型之间的本质区别:

CHAR VARCHAR
It stands of character. It stands for variable character.
It stores the values in fixed length that we declare while creating a table. It stores the values in a variable-length string with one or two-byte length prefix.
This data type can be padded with trailing space to keep the specified length. This data type cannot be padded with any character, including space, when they are stored.
It cannot hold more than 255 characters. It can hold up to 65535 characters.
It supports static memory allocation. It supports dynamic memory allocation.