【MySQL报错办理方案】MySQL存emoji心情报错 Incorrect string value: ‘\\ ...

打印 上一主题 下一主题

主题 1066|帖子 1066|积分 3198

出错形貌

  发现存入MySQL的字段有emoji,报错如下:

报错原因

  MySQL版本字符设置原因。
  一、MySQL版本应大于5.5.3。
  查看mysql版本下令:
  1. select version();
复制代码
  二、字符设置。
  简单地说,真正的unicode是4字节表示一个字符,但是如许成本高,会有空间浪费,因此有很多unicode的“方言”出现,如utf-8来淘汰存储成本。
  emoji是4字节存储的,而mysql里面的utf8编码不支持,因此需要更改编码为utf8mb4,排序规则设置为utf8mb4_general_ci即可。
  一文带你相识unicode编码的来龙去脉:ASCII,Unicode和UTF-8终于找到一个能完全搞清晰的文章了。
办理方案

  可以按照以下步调来。
  一、直接将要存emoji的字段的编码规则改掉就行了。如许改动成本最小。
  1. ALTER TABLE youe_table MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制代码
  二、此时应该去改数据源配置。这里讲两种,Java和Python。
  Java的话,在数据源后面加上代码:
  1. useUnicode=true&characterEncoding=utf-8&autoReconnect=true
复制代码
  characterEncoding=utf-8会自动适配utf8bm4。但是mysql-connector必须是5.1.13之后的版本,否则不支持utf8mb4。
  Python的话,我用的是PyMYSQL,在毗连数据源的时候如许写:
  1. conn = pymysql.connect(
  2.       host='localhost',
  3.       user='root',
  4.       password='123',
  5.       database='db',
  6.       charset='utf8mb4' // 主要是这一行
  7.   )
复制代码
  三、还不行的话,看看表的编码是不是utf8mb4。
  1. SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
复制代码

  如果不是,可以在可视化界面里把数据库编码改掉。或者在default.ini文件里改动如下:
  1. [client]
  2. default-character-set=utf8mb4
  3. [mysql]
  4. default-character-set=utf8mb4
  5. [mysqld]
  6. character-set-client-handshake=FALSE
  7. character-set-server=utf8mb4
  8. collation-server=utf8mb4_unicode_ci
  9. init_connect='SET NAMES utf8mb4'
复制代码
  末了开管理员模式重启mysql:
  1. net stop mysql
  2. net start mysql
复制代码
  末了可以插入emoji拉!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表