MySQL VARCHAR字符类型

一、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 给出错误消息:Data is too long for column 'Name' at row 1。输出更清楚地解释了它。

二、MySQL VARCHAR 和空格

MySQL 在存储时不会为 varchar 值填充空间。MySQL 在存储或检索 varchar 值时也会保留尾随空格。我们可以通过以下示例来理解它,其中INSERT语句在表Test3的Name列中添加值:

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

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

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

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

但是,当我们尝试插入一个带有超过列长度的尾随空格的 varchar 值时,MySQL 将截断尾随空格。此外,MySQL 发出警告。下面的例子解释得更清楚:

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

上面的语句将一个长度为6的值插入到 name 列中。该值仍然插入到列中,但MySQL在添加值之前会截断尾随空格。我们可以使用下面的查询进行验证,我们可以看到插入语句已成功添加,但会显示警告:Data truncated for column 'name' at row 1:

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

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

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

热门文章

优秀文章