Mysql 简明教程
MySQL - VARCHAR
The MySQL Varchar Data Type
MySQL VARCHAR 数据类型用于存储变长字符字符串,其长度最长为 65,535 个字节。
在 MySQL 中,当您将文本存储在 VARCHAR 列中时,它需要一些额外的空间来跟踪文本的长度。此额外空间可以是 1 或 2 个字节,具体取决于文本的长度。如果文本较短(少于 255 个字符),则它使用 1 个字节作为长度。对于较长的文本,它使用 2 个字节。
每行中数据总大小加上长度信息不能超过表中的一行 65535 字节。
Example
在以下查询中,我们正在创建一个名为 test_table 的新表,其中有两个列 column1 和 column2 。
正如我们可以在下面的代码块中看到的,这些列(column1 = 32765 和 column2 = 32766)占用了 65531 字节。这些列将分别占用 2 个字节作为长度前缀。因此,这些列总共占用 32765+2+32766+2 = 65535 字节 −
CREATE TABLE test_table (
column1 VARCHAR(32765) NOT NULL,
column2 VARCHAR(32766) NOT NULL
)CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Example
现在,让我们创建另一个表 test_table2 ,并将 32766 和 32766 提供给两个列(column1 和 column2) −
CREATE TABLE test_table2 (
column1 VARCHAR(32766) NOT NULL, --error
column2 VARCHAR(32766) NOT NULL
)CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Output
正如我们可以在下面的输出来看到的,生成了一个错误,因为行大小(32766 +2 +32766 +2 = 65536)超过了最大限制(65,535) −
ERROR 1118 (42000): 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
Example
在这里,我们正在使用以下查询创建一个名为 CUSTOMERS 的另一个表 −
CREATE TABLE CUSTOMERS (
ID int PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(3)
);
以下是所获得的输出 −
Query OK, 0 rows affected (0.03 sec)
现在,我们正在向 NAME 列中插入一个字符串,其中长度大于 VARCHAR 列的长度 −
INSERT INTO CUSTOMERS (NAME) VALUES ('Rahul');