我一直在使用一个UTF-8编码的MySQL DB,它现在需要能够存储4字节的表情符号,所以我决定将utf8编码改为utf8mb4:
ALTER DATABASE bstdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE HISTORY CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE HISTORY CHANGE SOURCE_CONTEXT SOURCE_CONTEXT VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;并将mysql.conf.d“字符集-服务器= utf8”改为“字符集-服务器= utf8mb4”
在这些步骤之后,我可以存储emojis (as ),但只有在MySQL控制台中执行MySQL查询时才能存储:当我试图从MySQL工作台或野生蝇when应用程序启动查询时,我会得到以下错误:
错误代码: 1366。不正确的字符串值:'\xF0\x9F\x92\xA2‘用于第1行的“SOURCE_CONTEXT”列
我想我需要改变客户端连接到DB的方式,但我不知道如何连接。我读过一些关于在JDBC中使用"useUnicode=yes“的文章,但是不起作用。
${bdpath:3306/bstdb?useUnicode=yes}
编辑:正如评论中所建议的,我尝试过:
${bdpath:3306/bstdb?字符编码=UTF-8}
但是没有运气,我得到了相同的“不正确的字符串值:'\xF0\x9F\x92\xA2'”错误。
也试过
${bdpath:3306/bstdb?useUnicode=true&characterEncoding=utf8mb4&}
但它拒绝建立一种联系。
对如何配置MySQL工作台和/或JDBC/Wildfly有什么想法吗?
MySQL版本为5.7.18
MySQL WorkBench版本为6.0.8
JDBC驱动程序版本为5.1.34
谢谢!
发布于 2017-06-19 11:37:50
终于起作用了。这是存储过程的一个问题,迁移后仍然是utf8而不是utf8mb4。这是一个两步的解决方案。
客户端默认字符集= utf8mb4 mysql默认字符集= utf8mb4 mysqld字符集客户端握手=假字符集服务器= utf8mb4排序规则服务器= utf8mb4_unicode_ci
显示过程状态,其中名称类似于“PROCEDURE _ name”;
发布于 2017-06-16 14:40:13
使用characterEncoding=utf8进行jdbc url
jdbc:mysql://x.x.x.x:3306/db?useUnicode=true&characterEncoding=utf8还请检查是否已将MySQL配置为使用utf8mb4。
[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请参阅这里
发布于 2018-10-19 14:16:15
https://stackoverflow.com/questions/44591895
复制相似问题