关于 MySQL 的 varchar 长度计算的疑问

先创建一个表
CREATETABLE`test`(
`a`varchar(3)NOTNULLDEFAULT''
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
字段a类型为varchar,长度3为三个字节,也就是说字段a里面最多可以存三个字节长度的数据。
但是我只想下面的sql语句竟然能成功。SQL语句为:
insertintotestvalues('汉ab');
“汉”unicode的字节长度为3,'ab'两个字符的字节长度为2,总共有的字节长度为5了,为什么能插入成功呢,我的sql_mode设置的为严格模式。
MySQL编码信息为:
>mysql>showvariableslike"%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\|
+--------------------------+---------------------------------------------+
湖上湖
浏览 324回答 2
2回答

梦里花落0921

mysqlvarchar类型的长度指的是字符个数,而不是字节数,和编码无关。SELECTchar_length('中文');2SELECTlength('中文');6(utf8编码下每个中文字符占用3个字节)

慕容3067478

在mysql中varchar(3)并不代表长度为3个字节,而是代表3个字符,对于varchar(3)来说“我不是”和“abc”是一样的长度~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript