作者:miya的发现王国sGA_998 | 来源:互联网 | 2023-02-01 08:56
我一直在使用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"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
谢谢!
1> motagirl2..:
最后,它的工作原理.存储过程存在问题,迁移后仍然是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,其名称为LIKE'procedate_name';
2> Mike Adamenk..:
使用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'。”