MySQL 中字元編碼問題

Yici_xin發表於2019-12-24

在寫後端服務對Mysql插入資料時,老是會因為字元編碼報錯,整理一下。

檢視編碼

  • 檢視資料庫編碼

    show variables like '%char%';

  • 檢視錶編碼

    show create table <表名>;

  • 檢視欄位編碼

    show full columns from <表名>;

修改編碼格式

修改資料庫字符集:

 ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];

把表預設的字符集和所有字元列(CHAR,VARCHAR,TEXT)改為新的字符集:

 ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
 如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

只是修改表的預設字符集:

 ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改欄位的字符集:

 ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
 如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

注:

在一次修改列字符集的時候,該表預設字符集為latin1,導致我使用如上CHANGE語句修改時,會使得原本列的非空屬性消失,而我在使用CHANGE同時加上非空和字符集設定時,會報出語法錯誤。

最終的解決辦法是:

先修改該表的預設字符集alter table xxx character set utf8mb4;

此時只需要再次CHANGE該列,只指定非空而不指定字符集,show create table xxx;檢視時就會發現,該列是沒有指定字符集的,那麼它就會使用該表的預設字符集。

相關文章