2017-06-16 313 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

    是的,糾正了! –