Mysql

mysqldump 排序問題

  • May 22, 2021

我已經嘗試建構一個 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 伺服器的預設字元集排序規則

引用自:https://dba.stackexchange.com/questions/127024