web-dev-qa-db-ja.com

データベースをインポートするときにエラーが表示される

私は自分のウェブサイトのデータベースを他のサーバーにインポートしていましたが、それはこのエラーを示しています。

データベースを複数回インポートしようとしましたが失敗しました。データベースファイルをエクスポートするときに来る「Add Drop Table」フィールドもチェックしましたが、何もしませんでした。

4
Rahul

この問題は、サーバがutf8mb4_unicode_520_ci照合タイプをサポートしていないために発生しています。

これを解決するには、すべてのテーブルの照合順序をutf8mb4_unicode_520_ciからutf8_general_ciに変換する必要があります。

phpmyadminでエクスポートしている場合は、次のことができます。

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

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

  3. 「形式固有のオプション」というタイトルのセクションに移動し、「データベースシステムまたは以前のMySQLサーバーとの互換性を最大にする」のドロップダウンをNONEからMYSQL40に変更します。

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

OR影響を受ける各テーブルで次のクエリを実行します。

ALTER TABLE myTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

更新: あなたはsqlでエクスポートされたファイルTYPE=MyISAMENGINE=MyISAMにも置き換えるべきです

6
Tunji

一部の人にとっては、照合utf8mb4_unicode_520_ciは奇妙に見えますが、WordPressは可能であればこの照合を使用します。他の照合順序が2番目に優れています。

この行に注意してください。

// _unicode_520_はより優れた照合です。利用可能な場合はそれを使用する必要があります。

いくつかのプラグインはutf8mb4_unicode_520_ci照合テーブルを何に関係なく作成します。

File: /var/www/html/test100.com/wp-includes/wp-db.php
761:    /**
762:     * Determines the best charset and collation to use given a charset and collation.
763:     *
764:     * For example, when able, utf8mb4 should be used instead of utf8.
765:     *
766:     * @since 4.6.0
767:     * @access public
768:     *
769:     * @param string $charset The character set to check.
770:     * @param string $collate The collation to check.
771:     * @return array The most appropriate character set and collation to use.
772:     */
773:    public function determine_charset( $charset, $collate ) {
774:        if ( ( $this->use_mysqli && ! ( $this->dbh instanceof mysqli ) ) || empty( $this->dbh ) ) {
775:            return compact( 'charset', 'collate' );
776:        }
777: 
778:        if ( 'utf8' === $charset && $this->has_cap( 'utf8mb4' ) ) {
779:            $charset = 'utf8mb4';
780:        }
781: 
782:        if ( 'utf8mb4' === $charset && ! $this->has_cap( 'utf8mb4' ) ) {
783:            $charset = 'utf8';
784:            $collate = str_replace( 'utf8mb4_', 'utf8_', $collate );
785:        }
786: 
787:        if ( 'utf8mb4' === $charset ) {
788:            // _general_ is outdated, so we can upgrade it to _unicode_, instead.
789:            if ( ! $collate || 'utf8_general_ci' === $collate ) {
790:                $collate = 'utf8mb4_unicode_ci';
791:            } else {
792:                $collate = str_replace( 'utf8_', 'utf8mb4_', $collate );
793:            }
794:        }
795: 
796:        // _unicode_520_ is a better collation, we should use that when it's available.
797:        if ( $this->has_cap( 'utf8mb4_520' ) && 'utf8mb4_unicode_ci' === $collate ) {
798:            $collate = 'utf8mb4_unicode_520_ci';
799:        }
800: 
801:        return compact( 'charset', 'collate' );
802:    }

utf8mb4_unicode_520_ci(Unicode Collat​​ion Algorithm 5.2.0、2010年10月)照合は、utf8mb4_unicode_ci(UCA 4.0.0、2003年11月)を改良したものです。

MySQLが今後のUCAをサポートする時期についての見解はありません。

最新のUCAは9.0.0です http://www.unicode.org/reports/tr10/しかしMySQLはそれをサポートしていません。

2
prosti