logo图片
MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL VARCHAR

MySQL中的Varchar是一种数据类型,用于存储文本,其长度最大为 65535个字符。表中的varchar列为 可变长度字符串,可以容纳数字或字符或两者兼有。此数据类型在版本5.0.3之前只能存储255个字符,但是在此版本及更高版本中,它最多可以存储65535个字符。它可以以 1字节或2字节长度前缀加上实际大小的形式存储在MySQL中。
长度前缀指定字符串值的字节长度,而不是最大长度我们设定的大小。如果值不需要超过255个字节,则列使用长度前缀加一个字节。如果值需要超过255个字节,则一列将使用长度前缀加上两个字节。
MySQL 的最大行大小为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、
MySQL VARCHAR
现在,我们将看到如果列大小 超过 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将生成错误。
MySQL VARCHAR
在另一种情况下,假设我们创建了一个名为 Test3 的表>使用以下语句:
CREATE TABLE Test3 (
  Id int PRIMARY KEY AUTO_INCREMENT,
  Name VARCHAR(5) NOT null
);
接下来,使用以下语句将值插入表中:
INSERT INTO Test3(Name) VALUES ('Stephen');
现在,执行以上语句。 MySQL给出错误消息: 第1行的'Name'列数据太长 。输出更加清楚地说明了这一点。
MySQL VARCHAR

MySQL VARCHAR和空格

MySQL不会在存储varchar值时填充空间。当它们存储或检索varchar值时,MySQL还保留了尾随空格。我们可以通过下面的示例来理解它,其中插入语句会在 名称列的值中添加值表 Test3 :
INSERT INTO Test3(Name) VALUES ('John ');
接下来,执行SELECT语句以检索值。
SELECT Id, Name, length(Name) FROM Test3;
它将给出以下输出,其中MySQL在长度计数中包括尾随空格,因为它不会增加列的长度。
MySQL VARCHAR
但是,当我们尝试插入尾随空格超过列长度的varchar值时,MySQL将 截断。另外,MySQL发出 警告。以下示例对其进行了更清晰的说明:
INSERT INTO Test3(Name) VALUES ('Peter ');
以上语句在名称列中插入一个长度为 6 的值。该值仍插入列中,但是 MySQL会在添加该值之前截断尾随空格。我们可以使用以下查询进行验证,在该查询中我们可以看到成功添加了insert语句,但带有以下警告: 第1行的"名称"列的数据被截断了 :
MySQL VARCHAR

Char和Varchar数据类型之间的差异

char和varchar数据类型均遵循 ASCII 字符。它们几乎相同,但是在存储和从数据库检索数据方面有所不同。下表总结了char和varchar数据类型之间的本质区别:
CHAR VARCHAR
代表个性。 它代表可变字符。
它将以创建表时声明的固定长度存储值。 它将值存储在具有一字节或两字节长度前缀的可变长度字符串中。
此数据类型可以用尾随空格填充以保持指定的长度。 此数据类型在存储时不能用任何字符(包括空格)填充。
最多可容纳255个字符。 它最多可以容纳65535个字符。
它支持静态内存分配。 它支持动态内存分配。

昵称: 邮箱:
Copyright © 2020 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4