继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MySQL 支持utf8mb4

www说
关注TA
已关注
手记 302
粉丝 83
获赞 493

utf8mb4 utf8mb3 utf8

Refer to


MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。

而utf8 是 utf8mb3 的别名。标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符,但是MySQL其实实现的utf8只是使用3个字节而已, utf8mb4才是真正意义上的 utf8

如果数据库表字段设置的字符集不是utf8mb4,却插入类似emjoy表情的时候:

  • 严格模式 下会出现  Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name' 这样的错误

  • 非严格模式下此后的数据会被截断


排序字符集

Refer to:  Collation Naming Conventions

SuffixMeaningRemark
_aiAccent insensitive
_asAccent sensitive
_ciCase insensitive不分区大小写
_cscase-sensitive区分大小写
_binBinary二进制存储,区分大小写

utf8mb4_ unicode_ ci VS utf8mb4_ general_ ci

Refer to: What's the difference between utf8_general_ci and utf8_unicode_ci

  • utf8_general_ci校对速度快,但准确度稍差。

  • utf8_unicode_ci准确度高,但校对速度稍慢。

数据库一般默认选择 utf8mb4_general_ci ;
如果你的应用有德语、法语或者俄语,请一定使用utf8mb4_unicode_ci

配置

vim /etc/my.cnf

[client] 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 

[mysqld] 
# character-set-client-handshake = FALSE character-set-server = utf8mb4 
collation-server = utf8mb4_general_ci 
init_connect='SET NAMES utf8mb4'

检查目前MySQL的字符集

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+-----------------+| Variable_name            | Value           |
+--------------------------+-----------------+
| character_set_client     | utf8            || character_set_connection | utf8            |
| character_set_database   | utf8            || character_set_filesystem | binary          |
| character_set_results    | utf8            || character_set_server     | utf8            |
| character_set_system     | utf8            || collation_connection     | utf8_general_ci |
| collation_database       | utf8_general_ci || collation_server         | utf8_general_ci |
+--------------------------+-----------------+
10 rows in set (0.00 sec)

总结

  • mysql 版本 5.5.3+

  • MySQL Connector/J Java驱动5.1.13+

  • /etc/my.cnf 配置中 添加配置,详见上面

  • 排序字符集选用 utf8mb4_unicode_ci

  • 列(字段)> 表 > 数据库

备注:
其实只要数据库支持utfbmb4(show char set),及时MySQL配置(/etc/my.cnf)中配置的默认字符集是utf8,也可以直接指定数据库、表、字段的字符集为utf8mb4,然后在连接的时候指定字符集为utf8mb4即可。
比如设置Java的连接参数中characterEncoding=utf8mb4

查看MySQL支持的字符集列表:


https://img1.mukewang.com/5d5e7b220001621107190980.png

mysql-show-char-set.png

建议

数据库在设置字符集的时候,设置成utf8mb4格式!



作者:全栈运维
链接:https://www.jianshu.com/p/8756f6a346ca

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP