MySQLの完全なUnicodeサポート

提供:MoodleDocs
Unicodeから転送)
移動先:案内検索

UTF-8

UTF-8は、ほとんどのWebサイトで使用されている文字エンコードです。これは、1,112,064個の有効なコードポイントのそれぞれをエンコードします。このすべての情報を格納するには、4バイトが必要です。最も一般的な値は3バイト領域です。 MySQLはデフォルトで3バイトのエンコーディングのみを使用するため、4バイトの範囲の値(アジアの文字や絵文字など)は保存できません。 4バイトの文字を含むテキストを入力しようとすると、Moodleデータベースエラーが発生します。

MySQLは完全な4バイトUTF-8サポートを提供しますが、特定のデータベース設定を構成する必要があります。 Moodleのバージョン3.3以降、MySQLとMariaDBの両方にデフォルトで完全なUTF-8が使用されます。既存のデータベースは引き続き部分的なサポートで実行されますが、完全なサポートに移行することをお勧めします。

Moodleには、MySQL(およびMariaDB)用の完全なUTF-8に変換するためのコマンドラインインターフェース(CLI)スクリプトが付属しています。 Moodleバージョン3.1.5および3.2.2より前では、この変換ツールは照合順序を「utf8_bin」の一部のバリアントにのみ変更していました。 'utf8_unicode_ci'が推奨される照合順序でした。 4バイト文字をサポートする「utf8mb4_unicode_ci」の使用をお勧めします(utf8_unicode_ciは3文字のみをサポートします)。

このスクリプトは、データベースの照合順序、文字セット、デフォルトのテーブル設定、および列定義を変更しようとします。

要約すると:

  • Moodle 3.1.5および3.2.2以降の新規インストールでは、データベースサーバーが適切に構成されている場合、デフォルトでutf8mb4が使用されます(以下を参照)。
  • Moodle 3.1.5または3.2.2にアップグレードするサイトは、スクリプトを使用してutf8mb4に更新できます。 Moodle 3.3、3.4、3.5では、データベースが完全なUTF-8サポートを使用していないことを示す警告が表示され、「utf8mb4_unicode_ci」への移行が提案されますが、「utf8_ *」を引き続き使用することもできます。

ファイル形式

varcharである列に大きなインデックスを許可するには、設定の組み合わせを設定する必要があります。システムのファイル形式は「バラクーダ」を使用する必要があります。これにより、行フォーマットを「圧縮」または「動的」に設定できます。この設定を有効にするには、以下にリストされているアップグレード手順を参照してください。 Barracudaファイル形式なしで大判を有効にしている場合、Moodleはインストールされません。

テーブルごとのファイル

この設定を有効にするには、以下にリストされているアップグレード手順を参照してください。

大きなプレフィックス

これは、「圧縮」または「動的」のいずれかの行形式と組み合わせて、191文字を超える大きなvarcharインデックスを可能にします。 この設定を有効にするには、以下にリストされているアップグレード手順を参照してください。

アップグレードの手順

最も重要なこと:変更を加えたりCLIスクリプトを実行したりする前に、データベースをバックアップしてください。

  • MySQLの構成設定を変更します(MariaDBの場合とまったく同じです)。このステップはオプションです。スクリプトを実行すると、スクリプト自体がこれらの変更を試みます。エラーが発生した場合は、以下に示すようにこれらの設定を手動で変更してみてください。
    • Linuxベースのシステムでは、my.cnfを変更する必要があります。これは「/ etc / mysql /」にあります。
    • my.cnfに次の変更を加えます。

重要な変更; InnoDB:次のInnoDBファイル形式構成オプションはMySQL 5.7.7で非推奨になり、削除されました。

   innodb_file_format
   innodb_file_format_check
   innodb_file_format_max
   innodb_large_prefix


[client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = true

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

[mysql]
default-character-set = utf8mb4
  • MySQLサーバーを再起動します。
  • CLIスクリプトを実行して、新しい文字セットと照合順序に変換します(Moodle 3.1.5、3.2.2以降が必要です)。
$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
  • すべてのデータベースとテーブルを修復して最適化してください。
mysqlcheck -u root -p --auto-repair --optimize --all-databases

注:非常に大規模なサイトでは、実行に時間がかかる場合があります。ライブサイトをオフラインにする前に、テストインストールの期間を確立する必要があります。場合によっては、データのダンプと再インポートを検討することもできます。

  • 'config.php' の$ CFG-> dboptions配列を調整して、MySQLサーバーに接続するときにMoodleが正しい照合順序を使用するようにします。
$CFG->dboptions = array(
  …
  'dbcollation' => 'utf8mb4_unicode_ci',
  …
);

データベースのコマンドライン(またはphpmyadminなど)にしかアクセスできない場合は、次のSQLコマンドを試すことができます。

SET GLOBAL innodb_file_format = barracuda;

SET GLOBAL innodb_file_per_table = 1;

SET GLOBAL innodb_large_prefix = 'on';
  • アップグレードが成功したことを確認するために、いくつかの絵文字(例:😂💩)をMoodleサイトに追加してみてください。