数据库字符集问题,是面试过程中经常被问到的,注意面试官给你挖坑的时候,不要往里面跳。
MySql 5.5 之前,UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区,BMP是从哪到哪?
基本就是 0000 ~ FFFF 这一区。
从MySQL 5.5 开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。
utf8mb4 is a superset of utf8
utf8mb4 兼容utf8,且比utf8能表示更多的字符。
至于什么时候用,看你做的什么项目了。。。
在做移动应用时,会遇到IOS用户在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。
MySql 5.0 以上的版本:
1、一个汉字占多少长度与编码有关:
UTF-8:一个汉字 = 3个字节,英文是一个字节
GBK: 一个汉字 = 2个字节,英文是一个字节
UTF-8对中文采用3个字节,对英文采用1个字节;GBK对中文采用2个字节,对英文采用1个字节;
2、varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。
utf8:
1character=3bytes, 1汉字=1character
也就是说一个字段定义成 varchar(200),则它可以存储200个汉字或者200个字母。
gbk:
1character=2bytes,1汉字=1character
也就是说一个字段定义成 varchar(200),则它可以存储200个汉字或者200个字母。
varchar(N), 这里的N是指字符数,并不是字节数.占用的字节数与编码有关
3、MySQL检查长度,可用SQL语言 SELECT LENGTH(fieldname) FROM tablename 这个命令可以看到各行使用的字节数。
SQL语句:select length(字段名) from 表名;
总结:MySQL中,(varchar 30 ,varchar是几就可以存几个文符)