出错形貌
发现存入MySQL的字段有emoji,报错如下:
报错原因
MySQL版本或字符设置原因。
一、MySQL版本应大于5.5.3。
查看mysql版本下令:
二、字符设置。
简单地说,真正的unicode是4字节表示一个字符,但是如许成本高,会有空间浪费,因此有很多unicode的“方言”出现,如utf-8来淘汰存储成本。
emoji是4字节存储的,而mysql里面的utf8编码不支持,因此需要更改编码为utf8mb4,排序规则设置为utf8mb4_general_ci即可。
一文带你相识unicode编码的来龙去脉:ASCII,Unicode和UTF-8终于找到一个能完全搞清晰的文章了。
办理方案
可以按照以下步调来。
一、直接将要存emoji的字段的编码规则改掉就行了。如许改动成本最小。
- ALTER TABLE youe_table MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制代码 二、此时应该去改数据源配置。这里讲两种,Java和Python。
Java的话,在数据源后面加上代码:
- useUnicode=true&characterEncoding=utf-8&autoReconnect=true
复制代码 characterEncoding=utf-8会自动适配utf8bm4。但是mysql-connector必须是5.1.13之后的版本,否则不支持utf8mb4。
Python的话,我用的是PyMYSQL,在毗连数据源的时候如许写:
- conn = pymysql.connect(
- host='localhost',
- user='root',
- password='123',
- database='db',
- charset='utf8mb4' // 主要是这一行
- )
复制代码 三、还不行的话,看看表的编码是不是utf8mb4。
- SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
复制代码
如果不是,可以在可视化界面里把数据库编码改掉。或者在default.ini文件里改动如下:
- [client]
- default-character-set=utf8mb4
- [mysql]
- default-character-set=utf8mb4
- [mysqld]
- character-set-client-handshake=FALSE
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- init_connect='SET NAMES utf8mb4'
复制代码 末了开管理员模式重启mysql:
- net stop mysql
- net start mysql
复制代码 末了可以插入emoji拉!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |