MySQL 的字符大小和字符集有关,如果字符集是 ascii,保存不了中文(会显示成乱码),如果是 UTF8,每个字符是1-3个字节。
用事实说话
试验用的 MySQL 5.6
先检查数据库字符集
show variables like '%char%';
结果:UTF8
Variable_name | Value |
---|---|
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | D:\Program Files\MySQL\MySQL Server 5.6\share\charsets\ |
创建表(注意:varchar(10)
)
CREATE TABLE `test_char` ( `s` VARCHAR(10) NULL DEFAULT NULL)
插入数据
十字ASCII字符,正确执行
insert into test_char(s)values('0123456789');
十个中文字符,正确执行
insert into test_char(s)values('一二三四五六七八九十');
但是十一个ASCII或中文都是报错,说数据太长。
结论
长度是当前字符集的字符长度,而不是字节长度!