Windows?服務(wù)器中使用?mysqldump?命令導(dǎo)出數(shù)據(jù)中文亂碼問(wèn)題的解決方案
起因
環(huán)境:阿里云服務(wù)器(windows server)、mysql(8.0.11)
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.11 | +-----------+ 1 row in set
在windows服務(wù)器中每天備份一次數(shù)據(jù)庫(kù)數(shù)據(jù),防止出現(xiàn)各種意外。這里就使用了mysql的 mysqldump 服務(wù)來(lái)導(dǎo)出備份,備份初始腳本如下
@echo off set hour=%time:~0,2% if "%time:~0,1%"==" " set hour=0%time:~1,1% set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2% echo %now% set host=127.0.0.1 set port=3306 set user=root set pass=馬賽克 # 要備份的數(shù)據(jù)庫(kù),這里我項(xiàng)目的數(shù)據(jù)庫(kù)是 xxx_project set dbname=xxx_project # 備份文件所在的位置,這里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名稱 set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql # 運(yùn)行備份命令 C:\mysql-8.0.11-winx64\bin\mysqldump 是我 mysql 安裝目錄下 mysqldump 所在的位置 "C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% -c --add-drop-table %dbname% > %backupfile% echo delete files before 10 days forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f" @echo on
命令保存為 bat 文件,雙擊執(zhí)行,能成功在 C:\MysqlDataBackups\ 下面生成一個(gè)文件
但是,當(dāng)我們打開(kāi)文件看的時(shí)候,發(fā)現(xiàn)里面的備注,中文相關(guān)的都是亂碼(PS:Notepad++ 軟件打開(kāi)不會(huì),可能是因?yàn)檫@個(gè)軟件比較智能)
解決辦法
檢查編碼
- 這里為了防止我們數(shù)據(jù)庫(kù)編碼不對(duì),我們先用命令查看數(shù)據(jù)庫(kù)編碼,這里可以看到編碼都是正常的, 主要字段是 character_set_results 的編碼
mysql> show variables like '%char%'; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | C:\mysql-8.0.11-winx64\share\charsets\ | +--------------------------+----------------------------------------+ 8 rows in set
上面幾個(gè)變量說(shuō)明:
- character_set_client: 設(shè)置客戶端使用的字符集。
- character_set_connection: 連接數(shù)據(jù)庫(kù)的字符集設(shè)置類型,如果程序沒(méi)有指明連接數(shù)據(jù)庫(kù)使用的字符集類型則按照服務(wù)器端默認(rèn)的字符集設(shè)置。
- character_set_database: 設(shè)置數(shù)據(jù)庫(kù)服務(wù)器中某個(gè)庫(kù)的字符集。
- character_set_filesystem: 設(shè)置文件系統(tǒng)的字符集。
- character_set_results: 設(shè)置服務(wù)端返回給客戶端結(jié)果顯示使用的字符集。
- character_set_server: 設(shè)置服務(wù)器安裝時(shí)指定的默認(rèn)字符集。
- character_set_system: 設(shè)置數(shù)據(jù)庫(kù)系統(tǒng)使用的字符集。
如果上面編碼不對(duì)的話,想快速設(shè)置的話執(zhí)行:set character_set_results = utf8;
上面這個(gè)只在當(dāng)前終端有效,如果想永久保存的話還是需要修改my.ini
的配置文件。
解決方案一(不適用)
網(wǎng)上很多說(shuō)法是 Windows PowerShell 輸出重定向 (“>”) 文件編碼默認(rèn)為UTF-16(LE)問(wèn)題,解決辦法都是把命令拿去 cmd 中執(zhí)行 ,但是我們這里是寫(xiě)成腳本了,在cmd中執(zhí)行是手動(dòng)執(zhí)行,雖然不是亂碼,但是我們放在腳本中執(zhí)行就出現(xiàn)亂碼了,這個(gè)辦法顯然對(duì)于我來(lái)說(shuō)是不可行的。
mysqldump -uroot -p --add-drop-table xxx_project > D:\xxx.sql
解決方案二(不可行)
還有的文章說(shuō)在導(dǎo)出的命令上加上各種編碼參數(shù),如:--default-character-set=utf8
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 xxx_project > D:\xxx.sql
在網(wǎng)上發(fā)現(xiàn)另一個(gè)參數(shù)--hex-blob
, 這個(gè)參數(shù)主要是為了把BINARY
, VARBINARY
, BLOB
, BIT
等類型導(dǎo)出為十六進(jìn)制,因?yàn)檫@些類型比較容易亂碼。再次嘗試:
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project > D:\xxx.sql
打開(kāi)文件后依然亂碼
最終方案
- 最后在MySQL官網(wǎng)找到一段 mysqldump 相關(guān)的說(shuō)明,在這段代碼中找到了解決方案(https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
這段話翻譯過(guò)來(lái)就是:
說(shuō)明:
在Windows上使用帶有輸出重定向的PowerShell生成的轉(zhuǎn)儲(chǔ)文件將創(chuàng)建一個(gè)具有UTF-16編碼的文件:
mysqldump [options] > dump.sql
但是,UTF-16不允許作為連接字符集(請(qǐng)參閱不允許的客戶端字符集),因此無(wú)法正確加載轉(zhuǎn)儲(chǔ)文件。要解決這個(gè)問(wèn)題,使用——result-file選項(xiàng),它會(huì)創(chuàng)建ASCII格式的輸出:
mysqldump [options] --result-file=dump.sql
- 最后執(zhí)行的命令 --result-file 不會(huì)創(chuàng)建文件。所以我們要提前創(chuàng)建 xxx.sql 文件,每次執(zhí)行都會(huì)清空 xxx.sql 里面的文件內(nèi)容,然后重新寫(xiě)入數(shù)據(jù)到文件中
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project --result-file=C:\MysqlDataBackups\xxx.sql
- 解決辦法找到了,但是光是這樣執(zhí)行,還達(dá)不到我們備份的目的,于是結(jié)合腳本,最終修改為:
@echo off set hour=%time:~0,2% if "%time:~0,1%"==" " set hour=0%time:~1,1% set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2% echo %now% set host=127.0.0.1 set port=3306 set user=root set pass=馬賽克 # 要備份的數(shù)據(jù)庫(kù),這里我項(xiàng)目的數(shù)據(jù)庫(kù)是 xxx_project set dbname=xxx_project # 備份文件所在的位置,這里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名稱 set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql #用 bat 命令先創(chuàng)建文件 backupfile,然后在用 mysqldump 往這個(gè)文件中 寫(xiě)入數(shù)據(jù) echo=>%backupfile% "C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% --default-character-set=utf8 --hex-blob -c --add-drop-table %dbname% --result-file=%backupfile% echo delete files before 10 days forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f" @echo on
最后看看效果
最后我們用 windows 的定時(shí)任務(wù)在每天凌晨三點(diǎn)的時(shí)候執(zhí)行這個(gè) bat 腳本,就能做到一天備份一次數(shù)據(jù)庫(kù)拉。
到此這篇關(guān)于Windows 服務(wù)器中使用 mysqldump 命令導(dǎo)出數(shù)據(jù),解決中文亂碼問(wèn)題的文章就介紹到這了,更多相關(guān)Windows使用mysqldump導(dǎo)出數(shù)據(jù)中文亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
- 解決Windows10下mysql5.5數(shù)據(jù)庫(kù)命令行中文亂碼問(wèn)題
- 簡(jiǎn)單解決Windows中MySQL的中文亂碼與服務(wù)啟動(dòng)問(wèn)題
- Windows服務(wù)器MySQL中文亂碼的解決方法
- windows環(huán)境下Mysql中文亂碼問(wèn)題解決方法
- Windows下利用Gvim寫(xiě)PHP產(chǎn)生中文亂碼問(wèn)題解決方法
- Windows下實(shí)現(xiàn)MySQL自動(dòng)備份的批處理(復(fù)制目錄或mysqldump備份)
相關(guān)文章
Windows Server 2019 DHCP服務(wù)器配置與管理——理論 Ⅰ
DHCP 是 Dynamic Host Configuration Protocol (動(dòng)態(tài)主機(jī)配置協(xié)議)的縮寫(xiě)2023-05-05Windows 2003 iis FLV 視頻不能播放的原因與解決
在本地使用Flash媒體播放器可以播放的FLV視頻,傳到網(wǎng)上就不行了.2009-02-02windows服務(wù)器ssl證書(shū)創(chuàng)建、安裝及配置方法
這篇文章主要介紹了windows服務(wù)器ssl證書(shū)創(chuàng)建、安裝及配置方法,需要的朋友可以參考下2018-02-02IIS無(wú)法啟動(dòng)提示“服務(wù)沒(méi)有及時(shí)響應(yīng)啟動(dòng)或控制請(qǐng)求”的解決方法[圖解]
一直以來(lái)Win XP 系統(tǒng)下IIS都用的好好的,一段時(shí)間不用,也不知道咋整的,一次想通過(guò)Internet 信息服務(wù)開(kāi)啟IIS時(shí),發(fā)現(xiàn)無(wú)法啟動(dòng)IIS并提示服務(wù)沒(méi)有及時(shí)響應(yīng)啟動(dòng)或控制請(qǐng)求2012-05-05win2003 WScript.shell與Shell組件安全篇
Windows2003服務(wù)器安裝及設(shè)置教程 組件安全篇,刪除網(wǎng)頁(yè)木馬常用的組件,提高網(wǎng)站安全。2010-05-05windows服務(wù)器之WSB(windows server backup)的備份和還原圖文方法
WSB(全稱:windows server backup)是windows server提供的備份和還原工具,主要還免費(fèi),這里簡(jiǎn)單為大家分享一下使用方法2023-06-06讓2K與XP、win2003服務(wù)器自動(dòng)登陸技巧
有些軟件不能安裝成系統(tǒng)服務(wù),需要登陸啟動(dòng)軟件。那么就需要設(shè)置服務(wù)器的自動(dòng)登錄。2011-01-01Windows Server 2016 PHP運(yùn)行環(huán)境安裝配置
這篇文章主要介紹了Windows Server 2016 PHP運(yùn)行環(huán)境安裝配置,需要的朋友可以參考下2017-08-08