MySQL VARCHAR类型之长度前缀

MySQL VARCHAR类型之长度前缀MySQL VARCHAR是一个可变长度的字符串,其长度可以达到65535。请注意,32765+2+32766+2=65535,这是最大行大小。

大家好,欢迎来到IT知识分享网。

MySQL VARCHAR是一个可变长度的字符串,其长度可以达到65535。MySQL将VARCHAR值存储为1字节或2字节长度前缀加上实际数据。

长度前缀指定值中的字节数。如果列所需的字节数小于或等于255,则长度前缀为1字节。如果列所需的字节数超过255个字节,则长度前缀为两个长度字节。

但是,最大长度取决于最大行大小(65535字节)和使用的字符集。这就意味着所有列的总长度应小于65535字节。

让我们看一个例子。

我们将创建一个新表,其中包含两列s1和s2,长度分别为32765(+2表示长度前缀)和32766(+2)。请注意,32765+2+32766+2=65535,这是最大行大小。

CREATE TABLE IF NOT EXISTS varchar_test ( s1 VARCHAR(32765) NOT NULL, s2 VARCHAR(32766) NOT NULL ) CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

语句已成功创建表。但是,如果我们将s1列的长度增加1。

CREATE TABLE IF NOT EXISTS varchar_test_2 ( s1 VARCHAR(32766) NOT NULL, -- error s2 VARCHAR(32766) NOT NULL ) CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

MySQL将报告错误消息:

Error Code: 1118. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 0.000 sec

如您所见,行大小太大,语句失败。

如果插入长度大于VARCHAR列长度的字符串,MySQL将发出错误。考虑以下示例:

CREATE TABLE items ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(3) ); INSERT INTO items(title) VALUES('ABCD');

在本例中,MySQL报出以下错误消息:

Error Code: 1406. Data too long for column 'title' at row 1 0.000 sec

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/82845.html

(0)
上一篇 2024-09-12 20:45
下一篇 2024-09-17 06:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信