utf8mb4在MySQL Workbench和JDBC
我一直用UTF-8编码的MySQL数据库,现在需要能够存储4个字节的表情符号,所以我决定从UTF8编码改为utf8mb4:utf8mb4在MySQL Workbench和JDBC
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”
完成这些步骤后,我能够存储表情图案(如图),但只有当SQL查询在MySQL控制台中执行:当我尝试从MySQL Workbench或Wildfly Web应用程序启动查询时,出现此错误:
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工作台的版本是6.0.8
JDBC驱动程序版本为5.1.34
谢谢!
最后,它的工作原理。这是存储过程的一个问题,在迁移之后,仍然是utf8而不是utf8mb4。 这是一个两步骤的解决方案。
- 如所建议的通过@话筒-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';
使用characterEncoding=utf8mb4&
为JDBC URL
jdbc:mysql://x.x.x.x:3306/db?useUnicode=true&characterEncoding=utf8mb4
此外,检查您已配置的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
工作见here
的连接进行检查,不能使用“的characterEncoding = utf8mb4”参数时,在所有成立:“值java.sql.SQLException:不支持的字符编码‘utf8mb4’” – motagirl2
您在此指定Java编码,因此您应该使用'UTF-8'。 –
不,她不需要utf8编码 –
您可以按照提供的文档为MySQL解决你的问题。这是MySQL documentation,你可以参考。
基本上,您的ALTER TABLE
脚本可以根据上述文档进行更改,然后您可以在连接字符串中使用以下参数以使更改生效。
jdbc:mysql://localhost/yourdatabasename?useUnicode=true&characterEncoding=UTF-8
请不要忘记在字符集和编码更改后重新启动MySQL服务。
当使用“characterEncoding = utf8mb4“参数:”java.sql.SQLException:不支持的字符编码'utf8mb4'。“ – motagirl2
您在此指定Java编码,因此您应该使用'UTF-8'。 –
是的,纠正了! –
错过了配置文件部分在我的答案,这是一个为我学习! –