一種比較特殊的不當操作引起的 MariaDB 數據亂碼

網上關於 MariaDB/MySql 亂碼的內容非常多,但我遇到了我從未想過的問題,直接用網上的方法,無法幫助我解決問題。

通常引起亂碼的原因是系統變量設置不當。但我設置了相關的變量,依然無法解決。最後發現,是操作不當,加上 MariaDB 對字符集的配置,真是太自由了。

原因:

Charset(Database) = latin1
Charset(Table) = utf8
Charset(Column) = latin1

關鍵在於最後一條,表中的文本字段,其字符集竟然是拉丁字母,雖然數據表本身的字符集是 utf8。怪不得怎麼設置都沒有!

注:查看錶創建語句指令
SHOW CREATE TABLE `table_name`;

分析了原因,大概是因爲創建 DB 時,用的是系統默認字符集 latin1,沒有指定 utf8,剛好系統裝完後,也沒有及時設置 MariaDB 默認字符集爲 utf8。隨後創建表時,都加了 charset utf8 進行了指定。而這個表,是過一段時間後,後面追加的,也沒有指定 charset,因此這時候,表(Table)和字段(Column)都是 Latin1,而後出現亂碼,發現表不是 utf8,就改成 utf8 的,但沒想到,字段沒有跟着變,依然是建表時所繼承的 latin1。

解決方法就是改字段的 charset:

ALTER TABLE `table_name`
    CHANGE COLUMN `field_name` `field_name` TEXT character set utf8 NOT NULL COMMENT 'chinese text';

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章