mysql utf8编码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql utf8编码相关的知识,希望对你有一定的参考价值。
做微信项目,报错
"Incorrect string value: ‘\\xF0\\x9F\\x98\\x8B‘ for column ‘nickname‘ at row 1"
原因是微信昵称中含有表情,表情属于4字节编码,而 mysql utf-8 编码只支持1-3个字节。从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,utf8mb4兼容utf8,即utf8是utf8mb4的子集。所以之后项目默认应该使用 utf8mb4 子集,不用想那么多。
所以就改表的编码呗,我没有什么好办法。备份好线上的数据库,然后手动一个一个调整含有 nickname 的表的编码。
我使用 Django 开发,所以我查了一下 Django 怎么设置默认编码。答案是:
Hyper simple, just add
‘OPTIONS‘: {‘charset‘: ‘utf8mb4‘}
to yourDATABASES
configuration:DATABASES = { ’default’: { ’ENGINE’: ’django.db.backends.mysql’, ’NAME’: ’example’, ’USER’: ’example’, ’PASSWORD’: ’example’, ’HOST’: ’’, ’PORT’: ’’, ’OPTIONS’: {’charset’: ’utf8mb4’}, } }
根据上面的设置好了,自然还要使用Django的migrate才会生效。
之前这个项目因为经手的人多,所以没有使用migrate而是手动创建表,也造成了 settings中设置好了 utf8mb4 但实际还是默认的utf-8。
参考:
http://blog.manbolo.com/2014/03/31/using-emojis-in-django-model-fields
https://my.oschina.net/wingyiu/blog/153357
以上是关于mysql utf8编码的主要内容,如果未能解决你的问题,请参考以下文章