問題描述

我在本地機器上有一個 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> Collat​​ion) 。

第四種方案

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 字節字符

第七種方案

經過長時間的研究,我找到了以上解決方案:

  1. 首先你改變了 wp-config.php> 數據庫 DB_CHARSET 默認為”utf8″

  2. 單擊數據庫的”Export” 選項卡

  3. 單擊”Custom” 單選按鈕

  4. 轉到 「Format-specific 選項」 部分,從 「NONE」 到 「MYSQL40」,更改 「數據庫系統或舊的 MySQL 服務器以最大化與… 的輸出兼容性」 的下拉列表。

  5. 滾動到底部,然後單擊 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。