MySql官方文档学习数据类型之Char和VarChar

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

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

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

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

若是没启动严格的SQL模式,对CHAR或者VARCHAR进行赋值阶段,若是列超过了列的最大长度,值会裁剪而后生成一个警告。若是使用严格的SQL模式,会产生一个错误。排序

无论使用那种SQL模式,VARCHAR在插入前都会截断超出列长度的结尾空格,并生成警告。字符串

char & varchar设置的最长度仅为8,可是下面的语句是能够执行成功的

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

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

下表经过显示将各类字符串值存储到CHAR(4)和VARCHAR(4)列中的结果来讲明CHAR和VARCHAR之间的区别(假设该列使用单字节字符集,如latin1)。date

显示在表的最后一行中的值仅在不使用严格的SQL模式时才适用。 若是启用了严格模式,则不会存储超过列长度的值,而且会致使错误。im

64783756377f44ffc9c45d7a73257544.png

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列中的值根据分配给该列的字符集排序规则进行排序和比较。

相关文章
相关标签/搜索