| 值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
| '' | ' ' | 4个字节 | '' | 1个字节 |
| 'ab' | 'ab' | 4个字节 | 'ab ' | 3个字节 |
| 'abcd' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
| 'abcdefgh' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
通过下面的例子说明该差别:
根据分配给列的字符集校对规则对CHAR和VARCHAR列中的值进行排序和比较。 请注意所有MySQL校对规则属于PADSPACE类。这说明在MySQL中的所有CHAR和VARCHAR值比较时不需要考虑任何尾部空格。 例如:
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 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.00 sec)
mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');
Query OK, 1 row affected (0.00 sec) mysql> SELECT myname = 'Monty ', yourname = 'Monty ' FROM names;
+-----------------------------+-------------------------------+
| myname = 'Monty ' | yourname = 'Monty ' |
+-----------------------------+-------------------------------+
| 1 | 1 |
+-----------------------------+-------------------------------+
1 row in set (0.00 sec)
请注意所有MySQL版本均如此,并且它不受SQL服务器模式的影响。 对于尾部填充字符被裁剪掉或比较时将它们忽视掉的情形,如果列的索引需要唯一的值,在列内插入一个只是填充字符数不同的值将会造成复制键值错误。 CHAR BYTE是CHAR BINARY的别名。这是为了保证兼容性。 ASCII属性为CHAR列分配latin1字符集。UNICODE属性分配ucs2字符集。
以上就是MySQL中CHAR和VARCHAR类型演变和详解。孤单寂寞与被遗弃感是最可怕的贫穷。更多关于MySQL中CHAR和VARCHAR类型演变和详解请关注haodaima.com其它相关文章!




