私はcPanelでホストされているphpMyAdminに転送したい私のローカルマシン上のWordPressデータベースを持っています。ただし、データベースを環境にインポートしようとすると、このエラーが発生し続けます。
#1273 - Unknown collation: 'utf8mb4_unicode_ci'
私は周りをGoogleで試してみましたが、私が見つけることができる唯一の解決策はこれです phpmysqlエラー - #1273 - #1273 - 未知の照合順序: 'utf8mb4_general_ci' これまでのところあまり役に立ちません。クッキーをクリアしようとしましたが、それでもうまくいきません。助けてください!
私たちのすべてのサーバーが古いバージョンの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>";
}
?>
1)データベースの[エクスポート]タブをクリックします
2)[カスタム]ラジオボタンをクリックします
3)「フォーマット固有のオプション」というセクションに移動し、「データベースシステムまたは古いMySQLサーバーとの互換性を最大限にするためのドロップダウン」をNONEからMYSQL40に変更します。
4)一番下までスクロールして[GO]をクリックします。
これを実行してもデータの損失が発生するかどうかはわかりませんが、一度試してみてもまったく気付きませんでした。上記にリンクされたフォーラムで回答した人も誰もしませんでした。
編集8/12/16 - この方法でデータベースをエクスポートすると、 Black Studio TinyMCEビジュアルエディタ ウィジェットに保存されているデータが失われることがあると思います。
最善の方法は、データベースを.sql
にエクスポートし、それをNotepad ++で開き、「検索と置換」に進むことです。それから "utf8mb4" を検索に、 "utf8" を置換にします。 utf8mb4_unicode_ci を utf8_unicode_ci に置き換えます。今度はあなたのPhpMyAdmin(目的地)に行き、DB照合をutf8_unicode_ci
に設定します(操作>照合)。
私はこれを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
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バージョンを使用するサイトにサイトを移行するワークフローを使用している場合、運が悪いかもしれません。
私の場合、それは私の結果になります
新しいサーバーが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_ci
とutf8mb4_unicode_520_ci
のインスタンスを置き換える
... utf8mb4_unicode_ci
付き
- 更新した.sql
ファイルをインポートしてください。
Wp-config.phpに行があります。
define('DB_CHARSET', 'utf8mb4');
Markouverの / Evsterの の指示に従えば、本番サーバーのこの行を次のように変更することを忘れないでください。
define('DB_CHARSET', 'utf8');
壊れた4バイト文字を修正するため
長期間の研究の後、私は上記のための解決策を見つけました:
まず、あなたは「UTF8」へのwp-config.phpを>データベースDB_CHARSETのデフォルトを変更します
データベースの「エクスポート」タブをクリックします
「カスタム」ラジオボタンをクリックします
「フォーマット固有のオプション」のセクションを移動して、「で、出力の互換性を最大化するために、データベースシステムや古いMySQLサーバ:」のドロップダウンを変更NONEからMYSQL40に。
一番下までスクロールして、[Go]をクリックします
次に、あなたがオンになっています。
あなたのホストはutf8mb4照合でテーブルを走らせることができるMySQLバージョンを提供していないようです。
EmojisをサポートするためにWordPressのテーブルはバージョン4.2(2015年4月23日にリリースされた)でutf8mb4に変更されましたが、 それを使うにはMySQL 5.5.3が必要です 5.5.3。 2010年3月からなので、通常は広く利用できるはずです。あなたのホストがそのバージョンを提供しているかどうかあなたは確認しますか?
そうでなければ、そしてアップグレードが不可能であれば、あなたは最新のWordPressバージョンを実行するために別のホストを探す必要があるかもしれません(そしてあなたは常にセキュリティ上の理由からそれをするべきです)。
そこで私は、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サーバーのバージョンに対応するマニュアルを確認してください。
最も簡単な方法は、データベースを.sql
にエクスポートし、それをNotepad ++で開き、utf8mb4_unicode_ci
をutf8_unicode_ci
に「検索と置換」し、さらにutf8mb4
をutf8
に置き換えることです。また、データベースの照合順序をutf8_unicode_ci
に変更することを忘れないでください([操作]> [照合順序])。
私もこの問題を経験しました。私のために働いた解決策はインポートする前にutf8/utf8_binに Sequel Pro と更新 Encoding and Collation でローカルデータベースを開くことでした。
notepad ++とctrl + H.
でsqlファイルを開き、検索時には "utf8mb4
"を、置換時には "utf8
"を入力します。その後、問題は修正されます。