mysql命令行中文亂碼解決方法是統(tǒng)一各環(huán)節(jié)字符集為utf8mb4。具體步驟如下:1.查看當(dāng)前編碼設(shè)置,確認(rèn)character_set相關(guān)變量是否為utf8或utf8mb4;2.修改配置文件,在[client]和[mysqld]下設(shè)置默認(rèn)字符集為utf8mb4并重啟服務(wù);3.修改已有數(shù)據(jù)庫(kù)和表的字符集,使用alter database和alter table語(yǔ)句轉(zhuǎn)換編碼;4.命令行連接時(shí)指定–default-character-set=utf8mb4參數(shù)或執(zhí)行set names ‘utf8mb4’臨時(shí)設(shè)置;5.檢查字段定義是否支持中文,通過(guò)show create table確認(rèn)字段字符集,必要時(shí)用modify修改字段編碼。完成上述步驟后可徹底解決中文亂碼問(wèn)題。
MySQL在命令行下出現(xiàn)中文亂碼,通常是因?yàn)樽址幋a設(shè)置不一致導(dǎo)致的。解決這個(gè)問(wèn)題的關(guān)鍵在于統(tǒng)一客戶端、連接、服務(wù)器和數(shù)據(jù)庫(kù)這幾個(gè)環(huán)節(jié)的字符集為utf8或utf8mb4。
查看當(dāng)前編碼設(shè)置
在操作之前,先確認(rèn)當(dāng)前MySQL的各項(xiàng)編碼設(shè)置:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
你會(huì)看到類似以下的輸出:
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | +--------------------------+----------------------------+
如果這些值不是 utf8 或 utf8mb4,那就需要調(diào)整了。
設(shè)置默認(rèn)字符集為utf8mb4
修改配置文件(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf):
[client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
保存后重啟MySQL服務(wù):
sudo systemctl restart mysql
這樣可以讓MySQL在啟動(dòng)時(shí)默認(rèn)使用utf8mb4編碼。
修改已有數(shù)據(jù)庫(kù)和表的字符集
如果你已經(jīng)有數(shù)據(jù)庫(kù)和數(shù)據(jù)表,還需要單獨(dú)修改它們的字符集:
- 修改數(shù)據(jù)庫(kù)編碼:
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 修改數(shù)據(jù)表編碼:
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意:修改表結(jié)構(gòu)會(huì)重建表,可能會(huì)對(duì)性能有影響,建議在低峰期操作。
命令行連接時(shí)指定字符集
有時(shí)候即使設(shè)置了全局編碼,通過(guò)命令行連接時(shí)也可能因?yàn)榭蛻舳四J(rèn)編碼問(wèn)題導(dǎo)致亂碼。可以在登錄時(shí)顯式指定字符集:
mysql -u username -p --default-character-set=utf8mb4
或者在MySQL中臨時(shí)設(shè)置:
SET NAMES 'utf8mb4';
這個(gè)命令相當(dāng)于同時(shí)設(shè)置了 character_set_client, character_set_connection, 和 character_set_results 為utf8mb4。
檢查字段定義是否支持中文
有些時(shí)候雖然整體編碼都改了,但個(gè)別字段還是用的latin1。可以檢查一下具體字段的編碼:
SHOW CREATE TABLE your_table;
確保字段定義中的字符集是utf8mb4,例如:
CREATE TABLE example ( id INT PRIMARY KEY, content TEXT CHARSET utf8mb4 );
如果不是的話,可以用下面語(yǔ)句修改字段編碼:
ALTER TABLE your_table MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4;
基本上就這些。只要把客戶端、連接、服務(wù)器、數(shù)據(jù)庫(kù)、數(shù)據(jù)表、字段這幾層的字符集都統(tǒng)一成utf8或utf8mb4,中文亂碼的問(wèn)題基本就能解決。