mysqldump 排序問題
我已經嘗試建構一個 shell 腳本來在 Debian 環境中使用 tar 球和 chron 作業來備份我們的 wordpress 數據庫。
我現在面臨的問題是,我們的 wp 數據庫在使用腳本導出,然後使用 phpmyadmin 導入後失去了一些特殊字元。最明顯的
€
標誌。Phpmyadmin 將數據庫列為
latin1_swedish_ci
,這是我在 phpmyadmin (iso-8859-1) 的 Import 選項卡中選擇的排序規則設置。我正在使用以下腳本導出數據庫:
mysqldump –user=user –password=password –default-character-set=latin1 –skip-set-charset databasename -r wp-db.sql
> > tar -cpzf /home/backups/wp-backups/website-wp-$(date +"%d-%m-%Y–%H-%M").tar.gz wp-db.sql && rm wp -db.sql > > >
我最好的猜測是排序規則一定存在一些問題,但我不知道在我正在採取的步驟中發生了某種類型的轉換。在某些時候,
€
必須放棄。在檢查
wp-db.sql
使用file
時,它被描述為iso-8859-1
,因此我想知道轉換發生在哪裡。從那以後,我嘗試測試一些東西並發現我無法將
UTF-8
文件轉換為iso-8859-1
是否包含€
符號。至少不使用iconv -f UTF-8 -t ISO_8859-1 測試
從我收集到的mysql原生執行
UTF-8
,這可能是問題嗎?如果我不理會這些,它會徹底毀掉一切。幾乎所有不是 wp 文件但儲存在數據庫中的東西都將顯示不正確或完全失去。通過將這兩個參數添加到我的腳本中,我消除了除特殊字元問題之外的大部分問題。
“顯示不正確”——這並不一定意味著文本儲存不正確。你這裡有多少步?
您在 WP 數據庫中有數據嗎?請提供
SHOW CREATE TABLE
其中一張表,以便我們驗證它是 latin1 還是 utf8。另外,請SELECT col, HEX(col)
查看表格中的內容€
。對於 utf8,十六進制應該是E282AC
. 正如您所指出的,它不能儲存在 latin1 中。如果您沒有看到該十六進制,請停止;在此之前我們需要調試一些東西。否則繼續…那你是在做轉儲嗎?讓 mysqldump 指定
CHARACTER SET
(不是COLLATION
)。查看轉儲文件。好吧,這可能沒用,因為這取決於您使用什麼工具來查看它。
然後你正在重新載入數據?重新載入後,十六進制說什麼?同樣,如果不是相同的十六進制,請停止。
現在您正在執行 WP 並嘗試顯示內容。在網頁上?看HTML;開始附近應該有一個
<meta... >
標籤。它說什麼?特別是,它說charset=UTF-8
嗎?要檢查的另一件事是
SET NAMES utf8
(或等效的)- phpmyadmin 建立了CHARACTER SET
一個地方;找到它。並為 WP 找到它。
轉到 MySQL Workbench 中的狀態和系統變數
我將所有 UTF8 設置為 UTF8MB4 不要更改二進製文件等…
MySQL Workbench 教程- 使用 Workbench 檢查 MySQL 伺服器的預設字元集排序規則