MySQL Workbench和JDBC中的utf8mb4

mot*_*rl2 9 java mysql jdbc mysql-workbench utf8mb4

我一直在使用UTF-8编码的MySQL数据库,现在需要能够存储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;
Run Code Online (Sandbox Code Playgroud)

并将mysql.conf.d"character-set-server = utf8"更改为"character-set-server = utf8mb4"

在这些步骤之后,我能够存储emojis(as),但只有在MySQL控制台中执行SQL查询时:当我尝试从MySQL Workbench或Wildfly webapp启动查询时,我收到此错误:

错误代码:1366.字符串值不正确:第1行的'SOURCE_CONTEXT'列''\ xF0\x9F\x92\xA2'

我假设我需要改变客户端连接到数据库的方式,但我不清楚如何.我已经阅读了在JDBC中使用"useUnicode = yes"的内容,但是没有用.

$ {bdpath:3306/bstdb了useUnicode = YES}

编辑:正如评论中所建议的,我试过:

$ {bdpath:3306/bstdb的characterEncoding = UTF-8}

但没有运气,我得到相同的"不正确的字符串值:'\ xF0\x9F\x92\xA2'"错误.

也试过了

$ {bdpath:3306/bstdb了useUnicode =真和characterEncoding = utf8mb4&}?

但它拒绝建立联系.

有关如何配置MySQL工作台和/或JDBC/Wildfly的任何想法?

MySQL版本是5.7.18

MySQL WorkBench版本是6.0.8

JDBC驱动程序版本是5.1.34

谢谢!

mot*_*rl2 6

最后,它的工作原理.存储过程存在问题,迁移后仍然是utf8而不是utf8mb4.这是一个两步解决方案.

  1. 正如@ mike-adamenko所建议的,my.cnf设置如下

[client] default-character-set = utf8mb4

[mysql] default-character-set = utf8mb4

[mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collat​​ion-server = utf8mb4_unicode_ci

  1. 在mysql中执行:

    SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

  2. 删除涉及的程序,并再次创建它们.他们将在utf8mb4.可以检查

SHOW PROCEDURE STATUS,其名称为LIKE'procedate_name';


Mik*_*nko 5

使用characterEncoding=utf8的JDBC URL

jdbc:mysql://x.x.x.x:3306/db?useUnicode=true&characterEncoding=utf8
Run Code Online (Sandbox Code Playgroud)

还要检查您是否已经配置了可以使用的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
Run Code Online (Sandbox Code Playgroud)

这里

  • 使用“ characterEncoding = utf8mb4”参数时,根本无法建立连接::“ java.sql.SQLException:不支持的字符编码'utf8mb4'。” (9认同)

Ala*_*sef 5

从 MySQL Connector/J 5.1.47 开始,

当连接字符串中使用 UTF-8 进行字符编码时,它映射到 MySQL 字符集名称 utf8mb4。

您可以在此处查看文档