簡體   English   中英

MySQL Workbench和JDBC中的utf8mb4

[英]utf8mb4 in MySQL Workbench and JDBC

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

在這些步驟之后,我能夠存儲表情符號(如💢),但只有在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

謝謝!

最后,它的工作原理。 存儲過程存在問題,遷移后仍然是utf8而不是utf8mb4。 這是一個兩步解決方案。

  1. 正如@ mike-adamenko所建議的,my.cnf設置如下

[client] default-character-set = utf8mb4

[mysql] default-character-set = utf8mb4

[mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collat​​ion-server = utf8mb4_unicode_ci

  1. 在mysql中執行:

    SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

  2. 刪除涉及的程序,並再次創建它們。 他們將在utf8mb4。 可以檢查

SHOW PROCEDURE STATUS,其名稱為LIKE'procedate_name';

對jdbc url使用characterEncoding=utf8

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

看到這里

您可以按照MySQL可用的文檔來解決您的問題。 這是您可以參考的MySQL文檔

基本上,可以根據上面提到的文檔更改ALTER TABLE腳本,然后可以在連接字符串中使用以下參數以使更改生效。

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

在設置字符集和編碼更改后,請不要忘記重新啟動MySQL服務。

從MySQL Connector / J 5.1.47開始,

當UTF-8用於連接字符串中的characterEncoding時,它映射到MySQL字符集名稱utf8mb4。

你可以在這里查看文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM