環境:
Windows Server 2012 R2
MySql 5.5.20
導出命令:
mysqldump --default-character-set=utf8mb4 --hex-blob -uroot -p db1 > C:\db1.sql
問題:導出後,文件中漢字出現亂碼.注意命令中已經指定了編碼爲utf8mb4.
上網搜索問題,有一個人也遇到這種問題,指定編碼後依然爲亂碼.最後發現是mysqldump命令的版本過低.但經過查看,我這個服務器的的mysqldump命令的版本也爲5.5.20.
試驗1:通過Navicat導出的文件漢字正常,不亂碼.
試驗2:試着用mysql -uroot -p --default-character-set=utf8mb4 t < C:\db1.sql命令,試驗導入.這時發現提示“<”運算符是爲將來使用而保留的。太奇怪了,輸入重定向符號都不識別?!
這個時候注意到,原來我一直在Power Shell 命令窗口中執行命令.以前也經常在Power shell中執行各種命令,並沒有發現什麼異常,所以這次也沒考慮PowerShell的問題.但是網友們的導出沒有我這種問題,那還是不用PowerShell窗口了吧.
切換到Cmd中執行導出命令.再次查看導出的文件,漢字正常,不再亂碼.
結論:Windows Server中不要在Power Shell命令窗口中執行mysqldump,會導致指定字符編碼無效!
簡單的查看了下Power Shell與Cmd窗口的屬性,代碼頁都是936GBK,沒有發現其它的區別.
原因未知,以後有時間再分析吧!或者哪位網友知道這方面問題,一起討論下