关于mysql:MySql官方文档学习数据类型之Char和VarChar

9次阅读

共计 1383 个字符,预计需要花费 4 分钟才能阅读完成。

char 和 varchar 类型是类似的,然而他们在存储和检索上也存在不同,并且它们在最大长度和结尾是否保留空格上也有不同。

char 的长度在你创建表格的时候由你本人定义的. 长度的范畴是 0 -255。当 char 值被存储的时候,它应用空格填充到规定的长度。当查看 char 值时,结尾空格将删除尾部空格,除非 PAD_CHAR_TO_FULL_LENGTH 这个 SQL_MODE 被启用。

varchar 列中的值是可变的字符串,长度规定在 0 到 65535 范畴内。VACHAR 的无效最大长度受限于最大行大小和应用的字符集

与 char 产生鲜明对比的是,varchar 的值被用 1 - 2 两个字节存储前缀数据。前缀的长度表明字节数,如果不超过 255 字节,一列应用一个长度的字节来示意。如果超过 255 字节,则应用两个长度的字节。

如果没启动严格的 SQL 模式,对 CHAR 或者 VARCHAR 进行赋值阶段,如果列超过了列的最大长度,值会裁剪而后生成一个正告。如果应用严格的 SQL 模式,会产生一个谬误。

不论应用那种 SQL 模式,VARCHAR 在插入前都会截断超出列长度的结尾空格,并生成正告。

char & varchar 设置的最长度仅为 8,然而上面的语句是能够执行胜利的

update `SimpleBookStore`.`Book_0` set `text`='123123' where `id`='2' 

和规范的 SQL 保持一致,VARCHAR 的值当他们被存储的时候值不会被填充,被存储的时候尾部空格会被存储和检索。

下表通过显示将各种字符串值存储到 CHAR(4)和 VARCHAR(4)列中的后果来阐明 CHAR 和 VARCHAR 之间的区别(假如该列应用单字节字符集,如 latin1)。

显示在表的最初一行中的值仅在不应用严格的 SQL 模式时才实用。如果启用了严格模式,则不会存储超过列长度的值,并且会导致谬误。

InnoDB 将长度大于或等于 768 字节的固定长度字段编码为可变长度字段,能够将其存储在页面外。例如,如果字符集的最大字节长度大于 3(如 utf8mb4 一样),则 CHAR(255)列能够超过 768 个字节。

如果给定值存储在 CHAR(4)和 VARCHAR(4)列中,则从这些列检索的值并不总是雷同的,因为检索时会从 CHAR 列中删除尾随空格。以下示例阐明了这种差别:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO vc VALUES ('ab', 'ab');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab)              | (ab)                |
+---------------------+---------------------+
1 row in set (0.06 sec)

CHAR,VARCHAR 和 TEXT 列中的值依据调配给该列的字符集排序规定进行排序和比拟。

正文完
 0