先创建一个表
CREATE TABLE `test` (
`a` varchar(3) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
字段a类型为varchar,长度3为三个字节,也就是说字段a里面最多可以存三个字节长度的数据。
但是我只想下面的sql语句竟然能成功。SQL语句为:
insert into test values ('汉ab');
“汉”unicode的字节长度为3,'ab'两个字符的字节长度为2,总共有的字节长度为5了,为什么能插入成功呢,我的sql_mode
设置的为严格模式。
MySQL编码信息为:
> mysql> show variables like "%char%";
+--------------------------+---------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\lamp\mysql-5.6.23-winx64\share\charsets\ |
+--------------------------+---------------------------------------------+
mysql varchar 类型的长度指的是字符个数,而不是字节数, 和编码无关。
2
6
(utf8 编码下每个中文字符占用 3 个字节)