java如何判断utf8mb4_关于MySQL Workbench和JDBC中的java: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;

并将mysql.conf.d"字符集服务器= utf8"更改为"字符集服务器= utf8mb4"

这些步骤之后,我能够存储表情符号(为??),但是仅当在MySQL控制台中执行SQL查询时:当我尝试从MySQL Workbench或Wildfly Webapp启动查询时,出现此错误:

Error Code: 1366. Incorrect string value: '\xF0\x9F\x92\xA2' for column 'SOURCE_CONTEXT' at row 1

我认为我需要更改客户端连接到数据库的方式,但是我不知道如何使用。我已经阅读了有关在JDBC中使用" useUnicode = yes"的内容,但是不起作用。

${bdpath:3306/bstdb?useUnicode=yes}

编辑:

如评论中所建议,我尝试使用:

${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

谢谢!

终于,它起作用了。这是存储过程的问题,迁移后仍然是utf8而不是utf8mb4。

这是一个两步解决方案。

如@ mike-adamenko所建议,将my.cnf设置为以下内容

[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

在mysql中执行:

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

删除涉及的过程,然后重新创建它们。它们将位于utf8mb4中。

可以检查

SHOW PROCEDURE STATUS where name LIKE 'procedure_name';

错过了我的答案中的配置文件部分,这对我来说是一个学习!

您所说的"涉及删除程序"是什么意思?关于第三点,您可以举一个procedure_name是什么的例子吗?得到空结果:(

"涉及的过程"是指通过使用" CREATE PROCEDURE procedure_name等"语句在给定数据库中自定义创建的过程(" procedure_name"是您为该过程指定的名称,如函数名)

将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

看这里

使用参数" characterEncoding = utf8mb4"时,根本无法建立连接::" java.sql.SQLException:不支持的字符编码utf8mb4。"

您在此处指定Java编码,因此应使用UTF-8。

不,她不需要utf8编码

@ motagirl2试试我更新的答案

我尝试了@MikeAdamenko,但拒绝连接

香港专业教育学院更新了答案

@MikeAdamenko" characterEncoding = utf8mb4"绝对不起作用。

从MySQL Connector / J 5.1.47开始,

When UTF-8 is used for characterEncoding in the connection string, it maps to the MySQL character set name utf8mb4.

您可以在这里查看文档

您可以按照MySQL可用的文档来解决问题。这是您可以参考的MySQL文档。

基本上,可以按照上述文档更改ALTER TABLE脚本,然后可以在连接字符串中使用以下参数使更改生效。

jdbc:mysql://localhost/yourdatabasename?useUnicode=true&characterEncoding=UTF-8

进行字符集和编码更改后,请不要忘记重新启动MySQL服务。

使用" characterEncoding = utf8mb4"参数时,根本无法建立连接:" java.sql.SQLException:不支持的字符编码utf8mb4"。

您在此处指定Java编码,因此应使用UTF-8。

是的,纠正了!

没有。与开始时相同的问题:历史:方法创建时出错:java.sql.SQLException:不正确的字符串值:第1行的srcctxt列的 xF0 x9F x92 xA2:/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值