MySQLのフル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"を使用する必要があります。これにより、行フォーマットを「圧縮」または「動的」に設定できます。この設定を有効にするには、下記のアップグレード手順を参照してください。 Barracudaファイルフォーマットなしでラージフォーマットを有効にしている場合、Moodleはインストールされません。

テーブルごとのファイル

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

大きい接頭辞

これは、「圧縮」または「動的」のいずれかである行フォーマットと共に、191文字を超える大きなvarcharインデックスを使用できます。この設定を有効にするには、下記のアップグレード手順を参照してください。

アップグレードする手順

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

  • MySQLの設定を変更します(MariaDBの場合もまったく同じ)。この手順はオプションです。あなたはスクリプトを実行することができます、そしてそれはそれら自身の変更を試みるでしょう。エラーが発生した場合は、以下のように手動でこれらの設定を変更してみてください。
    • Linuxベースのシステムでは、my.cnfを変更したいでしょう。これは '/ etc / mysql /'にあります。
    • my.cnfに以下の変更を加えます。
[client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

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

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

  • MySQLサーバに接続するときにMoodleが正しい照合順序を使用するように、 config.phpの$ CFG-> dboptions配列を調整してください。
$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サイトに絵文字(例えば😂💩)を追加してみてください。