問題描述
我在本地機器上有一個 wordpress 資料庫,我想轉移到 Cpanel 上託管的 phpMyAdmin 。但是,當我嘗試將資料庫匯入到環境中時,我會收到這個錯誤
#1273 - Unknown collation: 'utf8mb4_unicode_ci'
我已經嘗試 google 了,唯一的解決方案,我可以找到這是一個 phpmysql error – #1273 – #1273 – Unknown collation: ‘utf8mb4_general_ci’,現在沒有太多的幫助。我已經嘗試清除 cookies,但仍然無法正常工作。請幫忙!
最佳解決方案
我有同樣的問題,我們所有的伺服器執行舊版本的 MySQL 。這可以透過執行 PHP 指令碼來解決。將此程式碼儲存到一個檔案並執行它輸入資料庫名稱,使用者和密碼,它會將歸類從 utf8mb4/utf8mb4_unicode_ci 更改為 utf8/utf8_general_ci
<!DOCTYPE html>
<html>
<head>
<title>DB-Convert</title>
<style>
body { font-family:"Courier New", Courier, monospace;" }
</style>
</head>
<body>
<h1>Convert your Database to utf8_general_ci!</h1>
<form action="db-convert.php" method="post">
dbname: <input type="text" name="dbname"><br>
dbuser: <input type="text" name="dbuser"><br>
dbpass: <input type="text" name="dbpassword"><br>
<input type="submit">
</form>
</body>
</html>
<?php
if ($_POST) {
$dbname = $_POST['dbname'];
$dbuser = $_POST['dbuser'];
$dbpassword = $_POST['dbpassword'];
$con = mysql_connect('localhost',$dbuser,$dbpassword);
if(!$con) { echo "Cannot connect to the database ";die();}
mysql_select_db($dbname);
$result=mysql_query('show tables');
while($tables = mysql_fetch_array($result)) {
foreach ($tables as $key => $value) {
mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
}}
echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}
?>
次佳解決方案
The technique in this post worked for me
1) 單擊資料庫的”Export” 選項卡
2) 單擊”Custom” 單選按鈕
3) 轉到 「Format-specific 選項」 部分,將 「資料庫系統或舊 MySQL 伺服器的最大化輸出相容性」 從 NONE 更改為 MYSQL40 。
4) 滾動到底部,然後單擊”GO” 。
我不確定如果這樣做導致任何資料丟失,但在一次我試過它,我沒有注意到任何。在與上述連結的論壇中回覆的人也沒有。
編輯 8/12/16 – 我相信以這種方式匯出資料庫會導致我丟失儲存在 Black Studio TinyMCE Visual Editor 小工具中的資料,儘管我還沒有執行多個測試來確認。
第三種解決方案
最好的辦法是將您的資料庫匯出到.sql,使用記事本++開啟它並轉到 「搜尋和替換」 。然後將”utf8mb4″ 放在搜尋框上,並將”utf8″ 替換。它會將 utf8mb4_unicode_ci 替換為 utf8_unicode_ci 。現在,您轉到 PhpMyAdmin(目標) 並將 DB 歸類設定為 utf8_unicode_ci(Operations> Collation) 。
第四種方案
WordPress 4.2 引入了對 security reasons 的”utf8mb4″ 字元編碼的支援,但只支援 MySQL 5.5.3 及更高版本。安裝程式 (和更新程式) 處理這種情況的方法是它檢查您的 MySQL 版本,只有在受支援的情況下,資料庫才會升級到 utfmb4 。
這在理論上聽起來不錯,但問題 (正如您所發現的) 是將資料庫從支援 utf8mb4 的 MySQL 伺服器遷移到不支援 utf8mb4 的資料庫。而另一方面應該是有效的,它基本上是一個 one-way 操作。
如 Evster 所指出的,您可能會使用 PHPMYAdmin 的”Export” 功能獲得成功。使用 「匯出方法:自定義」 和 「資料庫系統或舊的 MySQL 伺服器以最大化輸出相容性:」 下拉式清單選擇 「MYSQL 40」 。
對於使用 mysqldump 的命令列匯出。看看國旗:
$ mysqldump --compatible=mysql4
注意:如果資料庫中有 4 個位元組的字元,它們將被損壞。
最後,對於任何使用流行的 WP Migrate DB PRO 外掛的人來說,a user in this WordPress.org thread 報告說,遷移總是處理得當,但是我無法找到任何官方的內容。
The WP Migrate DB plugin translates the database from one collation to the other when it moves 4.2 sites between hosts with pre- or post-5.5.3 MySQL
在這個時候,似乎沒有辦法選擇退出資料庫更新。因此,如果您正在使用從伺服器或本地主機遷移站點的工作流程與 MySQL> 5.5.3 使用較舊的 MySQL 版本,可能是運氣不好的。
第五種方案
我在 linux 中使用這個
sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql
然後恢復 your_file.sql
mysql -uyourdbuser -pyourdbpasswd yourdb < your_file.sql
第六種方案
wp-config.php 中有一行:
define('DB_CHARSET', 'utf8mb4');
如果您遵循 Markouver’s /Evster’s 說明,請勿忘記將生產伺服器上的此行更改為
define('DB_CHARSET', 'utf8');
以修復破壞的 4 位元組字元
第七種方案
經過長時間的研究,我找到了以上解決方案:
-
首先你改變了 wp-config.php> 資料庫 DB_CHARSET 預設為”utf8″
-
單擊資料庫的”Export” 選項卡
-
單擊”Custom” 單選按鈕
-
轉到 「Format-specific 選項」 部分,從 「NONE」 到 「MYSQL40」,更改 「資料庫系統或舊的 MySQL 伺服器以最大化與… 的輸出相容性」 的下拉式清單。
-
滾動到底部,然後單擊 go
然後你在。
第八種方案
看起來像你的主機不提供一個 MySQL-version,它能夠執行 utf8mb4 排序規則的表。
WordPress 表更改為 utf8mb4 版本 4.2(釋出於 2015 年 4 月 23 日) 支援 Emojis,但 you need MySQL 5.5.3 to use it. 5.5.3 。從 2010 年 3 月起,通常應該廣泛使用。 Cna 你檢查你的主機是否提供該版本?
如果沒有,並且無法進行升級,則可能需要注意另一個主機才能執行最新的 WordPress 版本 (出於安全考慮,您應該始終執行此操作) 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。