導(dǎo)出mysql數(shù)據(jù)出現(xiàn)中文亂碼,主要是字符集設(shè)置不一致導(dǎo)致。首先應(yīng)確認(rèn)數(shù)據(jù)庫(kù)、表及字段的字符集是否為utf8或utf8mb4,可通過(guò)show create database和show create table命令檢查,若不是則建議先轉(zhuǎn)換字符集。其次在使用mysqldump導(dǎo)出時(shí)必須加上–default-character-set=utf8mb4參數(shù),確保以正確編碼處理數(shù)據(jù)。此外需注意導(dǎo)出文件保存格式應(yīng)為utf-8,建議使用支持utf-8的編輯器打開或修改文件。最后導(dǎo)入時(shí)也應(yīng)保持字符集一致,可加–default-character-set=utf8mb4參數(shù)或執(zhí)行set names ‘utf8mb4’;,從而避免整個(gè)流程中出現(xiàn)亂碼問(wèn)題。
導(dǎo)出MySQL數(shù)據(jù)時(shí)出現(xiàn)中文亂碼,通常是字符集設(shè)置不一致造成的。使用 mysqldump 導(dǎo)出數(shù)據(jù)時(shí),只要在命令中正確指定字符集,基本就可以避免這個(gè)問(wèn)題。
確保數(shù)據(jù)庫(kù)和表的字符集正確
在導(dǎo)出之前,首先要確認(rèn)你的數(shù)據(jù)庫(kù)、表以及字段使用的字符集是否為支持中文的類型,比如 utf8mb4 或 utf8。可以通過(guò)以下命令查看:
-
查看數(shù)據(jù)庫(kù)字符集:
SHOW CREATE DATABASE your_database_name;
-
查看數(shù)據(jù)表字符集:
SHOW CREATE TABLE your_table_name;
如果發(fā)現(xiàn)不是 utf8 或 utf8mb4,建議先進(jìn)行字符集轉(zhuǎn)換再導(dǎo)出,否則即使導(dǎo)出時(shí)設(shè)置了字符集也可能無(wú)效。
使用 –default-character-set 參數(shù)
這是解決亂碼問(wèn)題最關(guān)鍵的一點(diǎn)。在使用 mysqldump 命令時(shí),一定要加上 –default-character-set=utf8mb4(或你實(shí)際使用的字符集),確保導(dǎo)出的內(nèi)容以正確的編碼處理。
例如:
mysqldump -u username -p --default-character-set=utf8mb4 database_name > backup.sql
如果你不確定應(yīng)該用哪個(gè)字符集,優(yōu)先使用 utf8mb4,它兼容性更好,能支持更多字符(包括表情符號(hào))。
注意:不要遺漏這個(gè)參數(shù),也不要寫成其他字符集,比如 latin1,否則即使導(dǎo)出成功,導(dǎo)入后也可能出現(xiàn)亂碼。
導(dǎo)出文件保存格式也要匹配
除了命令行參數(shù)外,還要注意導(dǎo)出文件本身的存儲(chǔ)格式。雖然你在命令中指定了字符集,但如果后續(xù)用文本編輯器打開或修改了文件,可能會(huì)因?yàn)榫庉嬈髂J(rèn)編碼不同而引入亂碼。
建議:
- 使用支持 UTF-8 的編輯器打開導(dǎo)出文件,如 VS Code、sublime Text;
- 如果需要修改 SQL 文件,記得保存時(shí)選擇 UTF-8 編碼;
- 不要隨意用 windows 自帶的記事本打開大文件,容易出問(wèn)題。
導(dǎo)入時(shí)也別忽略字符集設(shè)置
雖然本文重點(diǎn)是“導(dǎo)出”,但為了避免前后不一致,提一下導(dǎo)入時(shí)也要注意字符集設(shè)置。比如在導(dǎo)入時(shí)同樣可以加上 –default-character-set=utf8mb4 參數(shù),或者在導(dǎo)入前執(zhí)行:
SET NAMES 'utf8mb4';
這樣可以保證整個(gè)導(dǎo)出與導(dǎo)入流程的字符集一致性。
基本上就這些。只要在導(dǎo)出時(shí)正確設(shè)置字符集,并檢查原始庫(kù)表的編碼,大多數(shù)中文亂碼問(wèn)題都可以避免。