如何让Mysql 5.5 VARCHAR的长度按utf8的规则计算?

lispythonic 2016-09-09 08:53:17
版本5.5,一切是常规安装, 没有什么特殊设置. 我这样定义一个表:
CREATE TABLE `user` (
`id` SERIAL PRIMARY KEY,
`username` varchar(3) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8

然后, username 只能接受ascii的3个长度的字符, 其他字符比如"啊啊啊"就只会保存一个'啊'字(显然是一个utf8字符按3个算)
insert into user (username) values ('啊啊啊');

那么,我究竟要怎么配置mysql才能让它正确识别utf8字符的长度?我的预期是"abc","ab啊",'啊a啊' 这些值都会被视作3个字符.
...全文
401 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2016-09-09
  • 打赏
  • 举报
回复
set names 'gbk'; 然后再 insert into 尝试一下。
lispythonic 2016-09-09
  • 打赏
  • 举报
回复
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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> show full columns from user;
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
| Field       | Type             | Collation       | Null | Key | Default           | Extra                       | Privileges                      | Comment |
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
| id          | int(10) unsigned | NULL            | NO   | PRI | NULL              | auto_increment              | select,insert,update,references |         |
| update_time | timestamp        | NULL            | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | select,insert,update,references |         |
| password    | varchar(6)       | utf8_general_ci | NO   |     | NULL              |                             | select,insert,update,references |         |
| username    | varchar(3)       | utf8_general_ci | NO   |     | NULL              |                             | select,insert,update,references |         |
| avatar      | varchar(50)      | utf8_general_ci | NO   |     | NULL              |                             | select,insert,update,references |         |
| openid      | varchar(50)      | utf8_general_ci | NO   |     | NULL              |                             | select,insert,update,references |         |
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
6 rows in set (0.00 sec)
致命的西瓜 2016-09-09
  • 打赏
  • 举报
回复
varchar(3)就是按照字符计数的 啊a啊 和 啊啊啊都是三个字符 只存了一个汉字应该是其他原因
ACMAIN_CHM 2016-09-09
  • 打赏
  • 举报
回复
napo1987 lispythonic 本版等级:T1 结帖率:0% 总发帖:3 正常结帖:0 未结帖:3
引用
当您的问题得到解答后请及时结贴. http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html 8、如何给分和结贴? http://bbs.csdn.net/help#post_dispose
ACMAIN_CHM 2016-09-09
  • 打赏
  • 举报
回复
检查其它三个字符集设置。
引用
按下贴中的方法检查字符集设置。并贴出以供分析。 http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx MySQL 中文显示乱码

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧