尚未崩坏 发表于 2024-11-15 21:34:04

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

出错形貌

  发现存入MySQL的字段有emoji,报错如下:
https://i-blog.csdnimg.cn/direct/f513b5ba59274de6b64a3f462c32e989.jpeg#pic_center
报错原因

  MySQL版本或字符设置原因。
  一、MySQL版本应大于5.5.3。
  查看mysql版本下令:
select version();
  二、字符设置。
  简单地说,真正的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%';
https://i-blog.csdnimg.cn/direct/03e5cff5b3f54ed88986c2c21531cac8.png#pic_center
  如果不是,可以在可视化界面里把数据库编码改掉。或者在default.ini文件里改动如下:

default-character-set=utf8mb4


default-character-set=utf8mb4


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拉!
https://i-blog.csdnimg.cn/direct/68f32dc4e27349ad9ed19175695b9ca2.png#pic_center

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【MySQL报错办理方案】MySQL存emoji心情报错 Incorrect string value: ‘\\