2017-06-16 371 views
3

我一直用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

谢谢!

回答

2

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

  1. 如所建议的通过@话筒-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';

    +1

    错过了配置文件部分在我的答案,这是一个为我学习! –

    4

    使用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

    +1

    的连接进行检查,不能使用“的characterEncoding = utf8mb4”参数时,在所有成立:“值java.sql.SQLException:不支持的字符编码‘utf8mb4’” – motagirl2

    +0

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

    +0

    不,她不需要utf8编码 –

    0

    您可以按照提供的文档为MySQL解决你的问题。这是MySQL documentation,你可以参考。

    基本上,您的ALTER TABLE脚本可以根据上述文档进行更改,然后您可以在连接字符串中使用以下参数以使更改生效。

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

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

    +1

    当使用“characterEncoding = utf8mb4“参数:”java.sql.SQLException:不支持的字符编码'utf8mb4'。“ – motagirl2

    +0

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

    +0

    是的,纠正了! –