【发布时间】:2017-11-19 09:17:52
【问题描述】:
我一直在使用 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 "character-set-server = utf8" 改为 "character-set-server = utf8mb4"
在这些步骤之后,我可以存储表情符号(如????),但只有在 MySQL 控制台中执行 SQL 查询时:当我尝试从 MySQL Workbench 或 Wildfly webapp 启动查询时,我收到此错误:
错误代码:1366。不正确的字符串值:'\xF0\x9F\x92\xA2' 列 'SOURCE_CONTEXT' 在第 1 行
我假设我需要更改客户端连接到数据库的方式,但我不知道如何。我读过一些关于在 JDBC 中使用“useUnicode=yes”的内容,但不起作用。
${bdpath:3306/bstdb?useUnicode=yes}
编辑: 正如 cmets 中所建议的,我尝试了:
${bdpath:3306/bstdb?characterEncoding=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
谢谢!
【问题讨论】:
标签: java mysql jdbc mysql-workbench utf8mb4