2016-01-20 114 views
-1

我有這樣BLOB不存儲UTF-8(中國)在MySQL

CREATE TABLE account_data (
    id BIGINT NOT NULL, 
    data BLOB NOT NULL, 
    PRIMARY KEY (account_id) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 

但是MySQL是不是把它作爲中國一個表,但是一些垃圾值 像«å«¢åææææ¶ I· 我到處檢查過,它說CHARSET必須是utf8,這是我的情況 我使用的MySql版本是5.6.14。

我試過

ALTER TABLE account_data MODIFY data BLOB CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

但由於某些原因,MySQL是給語法錯誤BLOB。

如果我做

insert into account_data (id 
      ,data) 
     VALUES 
      (5952638508182497, 

"123456偟 滭滹漇 嶕憱撏 齞齝囃 熤熡" 

      ); 

併爲您在MySQL工作臺查看器中的文字,我可以看到123456但對中國我看到垃圾。

謝謝

+0

'BLOB' *是*二進制垃圾,您希望如何/何時/在哪裏顯示爲中文字符?你究竟如何插入數據? – deceze

+0

我正在使用MyBatis來插入並選擇,我會將數據顯示爲JSON。對於英文來說,它工作得很好,只爲中文我面臨這個問題。 – Yogi

+0

顯示一些具體的代碼示例。 – deceze

回答

0

您可以嘗試設置字符集的DB和列。

ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

希望這能幫助你!

+0

我試過這個ALTER TABLE MODIFY BLOB CHARACTER SET utf8 COLLATE utf8_unicode_ci;但由於某些原因,MySQL給BLOB提供了語法錯誤。 – Yogi

+0

BLOB是二進制類型,字符集只適用於文本字段。對於BLOB,編碼問題可能來自編寫和讀取代碼中的BLOB文件的方式。 –

0

對於中國人,你想要CHARACTER SET utf8mb4,以及可選的一些COLLATION開始utf8mb4_,默認可能是好的。

BLOB應該像您所描述的那樣工作,但插入連接和讀取連接可能配置不同。你提到了Workbench;它裏面設置了什麼字符集?是用於閱讀和寫作嗎?

您提供的樣本胡言亂語(不正確地映射到任何中國)看起來像變爲亂碼,這通常是由具有用於建立連接latin1引起的。 (這是舊的默認設置。)

您提到過5.6.14;什麼用於插入和選擇?