亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Windows?服務器中使用?mysqldump?命令導出數據中文亂碼問題的解決方案

 更新時間:2022年12月02日 11:23:46   作者:天下沒有收費的bug  
在windows服務器中每天備份一次數據庫數據,防止出現各種意外,這里就使用了mysql的?mysqldump?服務來導出備份,接下來通過本文給大家介紹Windows?服務器中使用?mysqldump?命令導出數據,解決中文亂碼問題,需要的朋友可以參考下

起因

環(huán)境:阿里云服務器(windows server)、mysql(8.0.11)

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.11    |
+-----------+
1 row in set

在windows服務器中每天備份一次數據庫數據,防止出現各種意外。這里就使用了mysql的 mysqldump 服務來導出備份,備份初始腳本如下

@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=馬賽克
# 要備份的數據庫,這里我項目的數據庫是 xxx_project
set dbname=xxx_project
# 備份文件所在的位置,這里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名稱
set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql
# 運行備份命令 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\ 下面生成一個文件

但是,當我們打開文件看的時候,發(fā)現里面的備注,中文相關的都是亂碼(PS:Notepad++ 軟件打開不會,可能是因為這個軟件比較智能)

解決辦法

檢查編碼

  • 這里為了防止我們數據庫編碼不對,我們先用命令查看數據庫編碼,這里可以看到編碼都是正常的, 主要字段是 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

上面幾個變量說明:

  • character_set_client: 設置客戶端使用的字符集。
  • character_set_connection: 連接數據庫的字符集設置類型,如果程序沒有指明連接數據庫使用的字符集類型則按照服務器端默認的字符集設置。
  • character_set_database: 設置數據庫服務器中某個庫的字符集。
  • character_set_filesystem: 設置文件系統(tǒng)的字符集。
  • character_set_results: 設置服務端返回給客戶端結果顯示使用的字符集。
  • character_set_server: 設置服務器安裝時指定的默認字符集。
  • character_set_system: 設置數據庫系統(tǒng)使用的字符集。

如果上面編碼不對的話,想快速設置的話執(zhí)行:set character_set_results = utf8;

上面這個只在當前終端有效,如果想永久保存的話還是需要修改my.ini的配置文件。

解決方案一(不適用)

網上很多說法是 Windows PowerShell 輸出重定向 (“>”) 文件編碼默認為UTF-16(LE)問題,解決辦法都是把命令拿去 cmd 中執(zhí)行 ,但是我們這里是寫成腳本了,在cmd中執(zhí)行是手動執(zhí)行,雖然不是亂碼,但是我們放在腳本中執(zhí)行就出現亂碼了,這個辦法顯然對于我來說是不可行的。

mysqldump -uroot -p --add-drop-table xxx_project > D:\xxx.sql

解決方案二(不可行)

還有的文章說在導出的命令上加上各種編碼參數,如:--default-character-set=utf8

mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 xxx_project > D:\xxx.sql

在網上發(fā)現另一個參數--hex-blob, 這個參數主要是為了把BINARY, VARBINARY, BLOB, BIT等類型導出為十六進制,因為這些類型比較容易亂碼。再次嘗試:

mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project > D:\xxx.sql

打開文件后依然亂碼

最終方案

  • 最后在MySQL官網找到一段 mysqldump 相關的說明,在這段代碼中找到了解決方案(https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)

這段話翻譯過來就是:

說明:

在Windows上使用帶有輸出重定向的PowerShell生成的轉儲文件將創(chuàng)建一個具有UTF-16編碼的文件:

mysqldump [options] > dump.sql

但是,UTF-16不允許作為連接字符集(請參閱不允許的客戶端字符集),因此無法正確加載轉儲文件。要解決這個問題,使用——result-file選項,它會創(chuàng)建ASCII格式的輸出:

mysqldump [options] --result-file=dump.sql

  • 最后執(zhí)行的命令 --result-file 不會創(chuàng)建文件。所以我們要提前創(chuàng)建 xxx.sql 文件,每次執(zhí)行都會清空 xxx.sql 里面的文件內容,然后重新寫入數據到文件中
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project --result-file=C:\MysqlDataBackups\xxx.sql
  • 解決辦法找到了,但是光是這樣執(zhí)行,還達不到我們備份的目的,于是結合腳本,最終修改為:
@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=馬賽克
# 要備份的數據庫,這里我項目的數據庫是 xxx_project
set dbname=xxx_project
# 備份文件所在的位置,這里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名稱
set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql
#用 bat 命令先創(chuàng)建文件 backupfile,然后在用 mysqldump 往這個文件中 寫入數據
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 的定時任務在每天凌晨三點的時候執(zhí)行這個 bat 腳本,就能做到一天備份一次數據庫拉。

到此這篇關于Windows 服務器中使用 mysqldump 命令導出數據,解決中文亂碼問題的文章就介紹到這了,更多相關Windows使用mysqldump導出數據中文亂碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論