我在MySql中保存unicode字符時遇到問題。字符在MySQL中顯示爲問號
最初我的數據庫字符集設置爲latin1,Unicode字符串保存爲引號。之後做一些研究,我添加以下行my.cnf
:
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
和執行查詢:
ALTER DATABASE <my_database> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
重啓MySQL後,我得到一個錯誤:
"org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Could not execute JDBC batch update; uncategorized SQLException for SQL ... Incorrect string value: '\xD0\xBA\xD1\x81\xD0\xB5...' for column 'first_name' at row 1"
查詢mysql> show variables like 'char%'
;返回結果:
Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/
和查詢mysql> show create database <my_database>
給出:
| Database | Create Database |
+-----------+-----------------------------------------------------------------------+
| my_database | CREATE DATABASE `my_database` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
我知道這個問題得到的回答很多時間,但我什麼都試過了我在谷歌發現,仍然無法修復它。任何幫助表示讚賞!
UPDATE
查詢SHOW CREATE TABLE後,我看到,該表的默認字符集是latin1的。
我改變了表格ALTER TABLE my_table CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
;
後,每列有CHARACTER SET設置爲latin1,而在查詢結果的最後默認字符集是utf8mb4
與ALTER TABLE my_table MODIFY my_column VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
改變柱後,我得到了保存該值時擺脫錯誤的,但它回到用問號保存字符串。仍然沒有發現問題
你是否改變了你的Java應用程序中的*連接編碼*(或任何產生該錯誤)......! – deceze
@deceze我在jdbc:mysql URL中有「useUnicode = true&characterEncoding = utf-8」,這是你的意思嗎? – yinjia
請提供'SHOW CREATE TABLE'。 _column_必須是utf8mb4。 –