为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2019-04-07 11:18:29
先创建一个表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\|+--------------------------+---------------------------------------------+
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

mysqlvarchar类型的长度指的是字符个数,而不是字节数,和编码无关。
SELECTchar_length('中文');
2
SELECTlength('中文');
6(utf8编码下每个中文字符占用3个字节)
                            
查看完整回答
反对 回复 2019-04-07
?
慕容3067478

TA贡献1773条经验 获得超3个赞

在mysql中varchar(3)并不代表长度为3个字节,而是代表3个字符,对于varchar(3)来说“我不是”和“abc”是一样的长度~
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信