#1273-照合順序が不明: 'utf8mb4_unicode_ci' cPanel


183

cPanelでホストされているphpMyAdminに転送したいローカルマシンにWordPressデータベースがあります。しかし、データベースを環境にインポートしようとすると、次のエラーが発生します。

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

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


回答:


107

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

?>

47
これはやり過ぎのようですvsmysqldump --compatible=mysql4
icc97

2
私にとってはうまくいきました。ファイルにdb-convert.php
Fred K

1
「localhost」を入力にすると完璧です。
br4nnigan 2016

2
mysqldump --compatible=mysql4または、以下の答えがより良い選択肢です。ライブサイトでこのようなものを変更することは賢明な考えではないと思います。正しい形式でエクスポートするか、それがオプションではない場合は、エクスポートされたファイルを編集することをお勧めします。
ティッシュ

だからあなたは私の命を救った、そして私があなたに与えることができるのは+1だけだ。
Taruc

229

この投稿のテクニックは私のために働いた

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

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

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

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

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

編集8/12/16-この方法でデータベースをエクスポートすると、Black Studio TinyMCE Visual Editorウィジェットに保存されたデータが失われると思いますが、確認のために複数のテストを実行していません。


うまく
いき

他のソリューションで複数回失敗した後、これは最初の試行で完全に機能しました。
Vincent Polisi 2016

一部の新しいWordpressサイトでは機能しません。他のサーバーにインポートすると、インポートしようとした最初のテーブルでこのエラーが生成されます(wp_commentmeta)#1064-SQL構文にエラーがあります。19行目で「TYPE = MyISAM AUTO_INCREMENT = 1」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
that-ben

これは私には何の違いもないようで、同じエラーメッセージが表示されます
pealo86

あなたはボスです
Aseel Ashraf

159

既に.sqlファイルをエクスポートしている場合、ファイルにファイルがある場合は、次のファイルを検索して置換することをお勧めします。

  • utf8mb4_0900_ai_ciutf8_unicode_ci
  • utf8mb4utf8
  • utf8_unicode_520_ciutf8_unicode_ci

に置き換えutf8mb4_unicode_ciられutf8_unicode_ciます。今、あなたはあなたのphpMyAdminのcPanelに行くとにDBの照合順序を設定しutf8_unicode_ci動作>照合

にエクスポートする.sql場合は、ファイルのエクスポート方法の形式を変更することをお勧めします。Evsterの回答を確認してください(これは同じページにあります)


2
それは、この1と一緒に完璧に取り組んでいるstackoverflow.com/a/30694416/1022726
iurii

すべてのあなたのUNIXの人々のために:sed -i.bak s/utf8mb4/utf8/g FILE_NAME。これによりutf8mb4、FILE_NAME内のすべてのが見つかりutf8、元のファイルのコピーをFILE_NAME.bakに保存するときに置き換えられます。あなたはあなたのケースで正確な連合を指定するためにそれを微調整する必要があるかもしれませんが、これは始まりです:)
DaveLak

1
また、utf8_unicode_520_ciをutf8_unicode_ciに置き換える必要がありました
Nick Rivers

またはvi:vi dump.sqlを介して、次にこれを実行します::%s/uf8mb4/utf8/g
ValentinGrégoire18年

2
と置き換えutf8_0900_ai_ciてくださいutf8_unicode_ci
Irfan Yusanif

44

私はこれを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 -u yourdBUser -p yourdBPasswd yourdB < your_file.sql

1
別の回答についてのコメントがあります。これはここで繰り返すことになります。OS Xバージョンのsedでは、-iフラグの後に追加の引数が必要です。だから、sed -i '' ....動作します。
2017年

2
私もこれを実行しなければなりませんでした:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
マイケル・ヘイズ

28

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

これは理論的にはすばらしいように聞こえますが、(ご存じのように)問題は、utf8mb4をサポートするMySQLサーバーからサポートしていないMySQLサーバーにデータベースを移行する場合です。逆も同様に機能するはずですが、基本的には一方向の操作です。

Evsterが指摘したように、PHPMYAdmin の「エクスポート」機能を使用すると成功する場合あります。「エクスポート方法:カスタム」を使用し、「データベースシステムまたは以前のMySQLサーバーでは、以下との出力互換性を最大化します。」ドロップダウンで「MYSQL 40」を選択します。

mysqldumpを使用したコマンドラインエクスポート。旗を見てください:

$ mysqldump --compatible=mysql4

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

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

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

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


互換性を「MYSQL 40」に変更することは、完全にうまくいきました。
Keryn Gill、2015

3
次に、mysql4互換ダンプをポストv5.5.3データベース(私は5.5.28を使用しています)にインポートしようとすると、スクリプトに含まれTYPE=MyISAMているため、失敗します。v5.1 で削除されたものです。検索を実行してに置き換えENGINE=MyISAMます。mysqldump出力オプションを使用してこれを回避する方法を見つけることができませんでした。
icc97 2015

26

私の場合、
新しいサーバーが実行されていて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ファイルを。


1
はい-5.6へのアップロードが最も簡単なソリューションです(Ubuntuには、mysql-server-5.65.5を自動的に削除するインストール可能なパッケージがあります)。
William Turrell 2017

15

wp-config.phpに次の行があります。

define('DB_CHARSET', 'utf8mb4');

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

define('DB_CHARSET', 'utf8');

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


1
また、変更することも忘れないでくださいdefine('DB_COLLATE', 'utf8_general_ci');。これは私に役立ちました。
Abduhafiz

10

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

  1. まず、wp-config.php>データベースのDB_CHARSETのデフォルトを「utf8」に変更します

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

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

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

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

その後、あなたはオンです。


7

ホストが、utf8mb4照合でテーブルを実行できるMySQLバージョンを提供していないようです。

ワードプレスのテーブルは、絵文字をサポートするためにバージョン4.2(2015年4月23日リリース)でutf8mb4に変更されましたが、これを使用するにはMySQL 5.5.3が必要です。5.5.3。2010年3月のものなので、通常は広く入手できます。ホスティング業者がそのバージョンを提供しているかどうかを確認しますか?

そうでない場合、アップグレードが不可能である場合、最新のWordPressバージョンを実行するために別のホスティング業者を探す必要がある場合があります(セキュリティ上の理由から、常にそうする必要があります)。


1
"mysql -V"を使用して、コマンドラインからMySQLのバージョンを確認できます
Edd Smith、

2

したがって、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

この回答で説明されているよう、これはphpMyAdminの「データベースシステムまたは古いMySQLサーバーとの出力互換性を最大化するためのオプションと同じです。ドロップダウンで「MYSQL 40」を選択します

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

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

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


1
OS Xのバージョンのsedを使用している場合は注意してください$ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql。あなたがコピーを保持する場合のようにdatabase_name.sql.bak置き換えるsedの前に:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
ジャスティン・フォルティエ

インライン化することもできますsed
davidbitton 2017

また、MySQL 8でmysqldumpを実行している場合は、--compatible=ansiオプションを使用する必要があります
AbstractVoid


1

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


0

メモ帳++でSQLファイルを開き、ctrl + H. その後、あなたは「置くutf8mb4」サーチとの「utf8」に置き換えます。その後、問題は修正されます。


「unknown collat​​ion utf8」と書かれている
クリスティアン・トラジナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.