MySQL VARCHAR

17 Mar 2025 | 4 分钟阅读

MySQL中的VARCHAR是一种数据类型,用于存储长度最多为65535个字符的文本。表中的varchar列是可变长度字符串,可以包含数字、字符或两者兼有。在5.0.3版本之前,此数据类型只能存储255个字符,但在此版本及之后的版本中,它可以存储多达65535个字符。它可以存储在MySQL中,作为1字节或2字节的长度前缀加上实际大小。

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

VARCHAR在MySQL中的最大长度受限于最大行大小65,535字节,该大小由除TEXT/BLOB列和使用的字符集之外的所有列共享。这意味着总列不应超过65535字节。

让我们借助一个例子来理解它。

我们将创建两个表,分别命名为Test1和Test2。这两个表都包含名为T1和T2的两个列。执行以下语句来创建表“Test1

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

MySQL VARCHAR

现在,我们将看看当列大小超过varchar的最大大小65535时会发生什么。执行下面的语句,我们将T1列的大小增加以创建表Test2

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

MySQL VARCHAR

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

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

现在,执行上述语句。MySQL会给出错误消息:Data is too long for column 'Name' at row 1(第1行,列‘Name’的数据太长)。输出更清楚地解释了这一点。

MySQL VARCHAR

MySQL VARCHAR 和空格

MySQL在存储varchar值时不会用空格填充。MySQL在存储或检索varchar值时也会保留尾随空格。我们可以通过下面的例子来理解这一点,其中一个INSERT语句向Test3表中的Name列添加值

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

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

MySQL VARCHAR

但是,当我们尝试插入一个带有尾随空格且超出列长度的varchar值时,MySQL会截断尾随空格。MySQL还会发出一个警告。下面的例子更清楚地解释了这一点

上面的语句插入了一个长度为的值到name列。该值仍然插入到列中,但MySQL在添加值之前截断了尾随空格。我们可以使用下面的查询进行验证,我们可以看到insert语句已成功添加,但出现了一个警告,内容为:Data truncated for column 'name' at row 1(第1行,列‘name’的数据被截断)。

MySQL VARCHAR

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

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

CHARVARCHAR
它代表字符(character)。它代表可变字符(variable character)。
它存储我们创建表时声明的固定长度的值。它存储可变长度字符串的值,并带有一个或两个字节的长度前缀。
此数据类型可以用尾随空格填充,以保持指定的长度。此数据类型在存储时不能用任何字符(包括空格)填充。
它不能容纳超过255个字符。它可以容纳多达65535个字符。
它支持静态内存分配。它支持动态内存分配。

下一主题MySQL enum