导读
MySQL里怎么存储那些看起来会乱码的字符?
我在“UTF8字符集的表怎么直接转UTF8MB4”一文中介绍了如何把表字符集由UTF8直接转换成UTF8MB4的几种方法。
1、只修改字符集(使用默认校验集)
- yejr@imysql.com> alter table t1 convert to character set utf8mb4
2、同时修改表字符集和校验集
- yejr@imysql.com> alter table t1 convert to character set utf8mb4 collate utf8mb4_bin;
3、只修改某列的字符集
- yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 not null default ‘’
4、同时修改某列的字符集和校验集
- yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 collate utf8mb4_unicode_ci not null default ‘’
好了,有个字符集为UTF8MB4的表中想存储各类不同字符集的文本,有哪些注意事项亿避免乱码?
如果是通过WEB接口存储数据,则建议在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(针对大多数文本,其实UTF8字符集就足够存储的了)。
其中,MySQL端的字符集设置比较让人头大,涉及到的字符集有好几个:
可见,涉及到字符集的因素实在太多,因此我们强烈建议各个环节全部采用同一种字符集,避免出现意外状况。
MySQL采用UTF8MB4字符集时,存储文本实际消耗字节数是由文本内容的字节数决定的,并非总是需要4字节,列举几种情况:
总结建议
附1,关于编码简介
附2,字符集兼容在线测试
为了方便大家,我写了个简单的PHP接口供测试,可以提交一些不常见的汉字,或者emoji表情符,看看是否都能正常显示。
开发这个接口时,发现钉钉中的个别表情符是由2个4字节编码组成的,也就是说一个emoji表情符,其实是需要8个字节的。
这个接口***输出的格式是:
字符串 : 字节数
比如 "a齒a : 5" ,表示 "a齒a" 这个字符串共消耗 5个字节,因为 "齒" 其实只需要3个字节来存储,虽然看起来挺大一坨的。
相应的代码如下:
- select vchar, length(vchar) as vcharlen
测试接口链接: utf8mb4字符集兼容性测试接口
如果想要写入4字节的汉字,可以从龙泉寺提供的字库拷贝过来,或者插入emoji表情符。
参考及延伸阅读
当前题目:MySQL怎么存文本不乱码?
URL分享:http://www.shufengxianlan.com/qtweb/news27/352177.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联