web-dev-qa-db-ja.com

#1273 - 未知の照合: 'utf8mb4_unicode_ci' cPanel

私はcPanelでホストされているphpMyAdminに転送したい私のローカルマシン上のWordPressデータベースを持っています。ただし、データベースを環境にインポートしようとすると、このエラーが発生し続けます。

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

私は周りをGoogleで試してみましたが、私が見つけることができる唯一の解決策はこれです phpmysqlエラー - #1273 - #1273 - 未知の照合順序: 'utf8mb4_general_ci' これまでのところあまり役に立ちません。クッキーをクリアしようとしましたが、それでもうまくいきません。助けてください!

157
Wairimu Murigi

私たちのすべてのサーバーが古いバージョンの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>";
}

?>
101
Stephen

この記事のテクニックは私のために働いた

1)データベースの[エクスポート]タブをクリックします

2)[カスタム]ラジオボタンをクリックします

3)「フォーマット固有のオプション」というセクションに移動し、「データベースシステムまたは古いMySQLサーバーとの互換性を最大限にするためのドロップダウン」をNONEからMYSQL40に変更します。

4)一番下までスクロールして[GO]をクリックします。

これを実行してもデータの損失が発生するかどうかはわかりませんが、一度試してみてもまったく気付きませんでした。上記にリンクされたフォーラムで回答した人も誰もしませんでした。

編集8/12/16 - この方法でデータベースをエクスポートすると、 Black Studio TinyMCEビジュアルエディタ ウィジェットに保存されているデータが失われることがあると思います。

230
Evster

最善の方法は、データベースを.sqlにエクスポートし、それをNotepad ++で開き、「検索と置換」に進むことです。それから "utf8mb4" を検索に、 "utf8" を置換にします。 utf8mb4_unicode_ci utf8_unicode_ci に置き換えます。今度はあなたのPhpMyAdmin(目的地)に行き、DB照合をutf8_unicode_ciに設定します(操作>照合)。

127

私はこれを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
36
halilintar8

Wordpress 4.2は セキュリティ上の理由 の "utf8mb4"文字エンコーディングのサポートを導入しましたが、MySQL 5.5.3以降のみがサポートしています。インストーラー(およびアップデーター)がこれを処理する方法は、MySQLバージョンをチェックし、サポートされている場合のみデータベースがutfmb4にアップグレードされることです

これは理論的には素晴らしいように聞こえますが、問題は(あなたが発見したように)utf8mb4をサポートするMySQLサーバーからサポートしないMySQLサーバーにデータベースを移行する場合です。他の方法でも機能するはずですが、基本的には一方向の操作です。

Evsterが指摘したように、PHPMYAdminの「エクスポート」機能を使用すると、mightが成功します。 「Export Method:Custom」を使用し、「Databaseシステムまたは古いMySQLサーバーに出力の互換性を最大化するには: 」ドロップダウンで「MYSQL 40」を選択します。

Mysqldumpを使用したコマンドラインエクスポートの場合。フラグを見てください:

$ mysqldump --compatible=mysql4

注:データベースに4バイト文字がある場合、それらは破損します。

最後に、人気のあるWP Migrate DB PROプラグインを使用している場合、 このWordpress.orgスレッドのユーザー は、移行が常に適切に処理されているが、見つけることができなかったことを報告します公式のもの。

WP Migrate DBプラグインは、MySQL 5.5.3より前または後のホスト間で4.2サイトを移動するときに、データベースをある照合から別の照合に変換します

現時点では、データベースの更新をオプトアウトする方法はないようです。したがって、MySQL> 5.5.3のサーバーまたはlocalhostから古いMySQLバージョンを使用するサイトにサイトを移行するワークフローを使用している場合、運が悪いかもしれません。

28
Mark Thomson

私の場合、それは私の結果になります
新しいサーバーがMySQL 5.5を実行していました、
古いサーバーはMySQL 5.6を実行していました。
古いサーバーからエクスポートした.sqlファイルをインポートしようとすると、このエラーが発生しました。

MySQL 5.5はutf8mb4_unicode_520_ciをサポートしていませんが、
MySQL 5.6が行います。

新しいサーバーでMySQL 5.6に更新すると、照合エラーが解決しました。

MySQL 5.5を保持したい場合は、次のことができます。
- エクスポートした.sqlファイルのコピーを作成してください
- utf8mb4unicode520_ciutf8mb4_unicode_520_ciのインスタンスを置き換える
... utf8mb4_unicode_ci付き
- 更新した.sqlファイルをインポートしてください。

24
SherylHohman

Wp-config.phpに行があります。

define('DB_CHARSET', 'utf8mb4');

Markouverの / Evsterの の指示に従えば、本番サーバーのこの行を次のように変更することを忘れないでください。

define('DB_CHARSET', 'utf8');

壊れた4バイト文字を修正するため

15
Isk1n

長期間の研究の後、私は上記のための解決策を見つけました:

  1. まず、あなたは「UTF8」へのwp-config.phpを>データベースDB_CHARSETのデフォルトを変更します

  2. データベースの「エクスポート」タブをクリックします

  3. 「カスタム」ラジオボタンをクリックします

  4. 「フォーマット固有のオプション」のセクションを移動して、「で、出力の互換性を最大化するために、データベースシステムや古いMySQLサーバ:」のドロップダウンを変更NONEからMYSQL40に。

  5. 一番下までスクロールして、[Go]をクリックします

次に、あなたがオンになっています。

9
Dead Boyz

あなたのホストはutf8mb4照合でテーブルを走らせることができるMySQLバージョンを提供していないようです。

EmojisをサポートするためにWordPressのテーブルはバージョン4.2(2015年4月23日にリリースされた)でutf8mb4に変更されましたが、 それを使うにはMySQL 5.5.3が必要です 5.5.3。 2010年3月からなので、通常は広く利用できるはずです。あなたのホストがそのバージョンを提供しているかどうかあなたは確認しますか?

そうでなければ、そしてアップグレードが不可能であれば、あなたは最新のWordPressバージョンを実行するために別のホストを探す必要があるかもしれません(そしてあなたは常にセキュリティ上の理由からそれをするべきです)。

7
flomei

そこで私は、MySQL 5.6からMySQL 5.5まで、このようにして解決しました。

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(オプション).sql.gzファイルを作成します。

$ gzip database_name.sql 

説明

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

この answer で説明されているように、これはphpMyAdminからのこのオプションとちょうど同等です: "出力の互換性を最大にするためのデータベースシステムか古いMySQLサーバー:"ドロップダウン選択 "MYSQL 40"

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

この問題を解決するには、これが必要です。

エラー1064(42000)、行18:SQL構文にエラーがあります。 9行目でnear 'TYPE = InnoDB'を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

2
Andrea

最も簡単な方法は、データベースを.sqlにエクスポートし、それをNotepad ++で開き、utf8mb4_unicode_ciutf8_unicode_ciに「検索と置換」し、さらにutf8mb4utf8に置き換えることです。また、データベースの照合順序をutf8_unicode_ciに変更することを忘れないでください([操作]> [照合順序])。

1
Brane

私もこの問題を経験しました。私のために働いた解決策はインポートする前にutf8/utf8_binに Sequel Pro と更新 Encoding and Collat​​ion でローカルデータベースを開くことでした。

1
Damian Walsh

notepad ++とctrl + H.でsqlファイルを開き、検索時には "utf8mb4"を、置換時には "utf8"を入力します。その後、問題は修正されます。

0
John