文字セットまたは照合順序を指定せずにデータベースを作成すると、サーバーのデフォルトが使用されます(期待どおり)。
MariaDB [(none)]> SHOW VARIABLES LIKE '%_server' ;
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| character_set_server | utf8mb4 |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
MariaDB [(none)]> CREATE DATABASE `test-without-charset` ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-without-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_unicode_ci |
+------------------------+
ただし、CREATE DATABASE
- query内で文字セットを指定すると、デフォルトの照合順序はutf8mb4_general_ci
に変更されます。
MariaDB [(none)]> CREATE DATABASE `test-with-charset` CHARACTER SET utf8mb4 ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-with-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_general_ci |
+------------------------+
私はすでにそれを見つけました( mysql-manual )
COLLATEなしでCHARACTER SET charset_nameが指定されている場合、文字セットcharset_nameとそのデフォルトの照合が使用されます。各文字セットのデフォルトの照合を表示するには、SHOW CHARACTER SETステートメントを使用するか、INFORMATION_SCHEMA CHARACTER_SETSテーブルをクエリします。
そして実際にutf8mb4_general_ci
が表示されているため、ルールに従っています
MariaDB [(none)]> SHOW CHARACTER SET LIKE 'utf8mb4';
+---------+---------------+--------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+--------------------+--------+
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
+---------+---------------+--------------------+--------+
だから私の質問は:このデフォルトの照合順序を文字セットutf8mb4
に変更するにはどうすればよいですか。この動作を変更するために変更できる構成ファイルはありますか?私はこれら2つが一貫していることを本当に望んでいます。
もちろん、Googleで関連性のあるものを見つけようとしましたが、collation_server
-設定を変更するだけで見つけることができます。
サーバーのバージョン:10.3.15-MariaDB-log MariaDBサーバー
DEFAULT
を変更する方法はないと思います。
とにかく、それ以降のUnicode標準に基づくutf8mb4_unicode_520_ci
を使用することをお勧めします。
すべての接続とCHARACTER SET
でCREATE TABLEs
とCOLLATION
を指定する習慣を身に付けてください。 MySQLとMariaDBは、latin1_swedish_ciからutf8mb4_0900_ai_ciに徐々に変更されています。 MariaDBはまだありませんが、すぐに動くと思います。そして、「900」はおそらく最後のUnicode標準ではありません。
文字セットと照合順序を明示的に指定することにより、古いペアであっても、制御と一貫性を維持できます。
妥協...
ただし、CREATE DATABASE
の文字セットと照合順序。次に、作成されたすべてのテーブルなし特定の設定がそれらの設定を継承します。そして、そのテーブル内の列はテーブルの設定を継承します。
オプション1
utf8mb4_0900_ai_ci
の代わりにutf8mb4_unicode_ci
を使用しても問題ない場合次に、サーバーシステム変数 @@ default_collation_for_utf8mb4 —が8.0.11で追加されたようですが、有効な値は次のとおりです。
utf8mb4_general_ci
utf8mb4_0900_ai_ci
ただし、utf8mb4_general_ci
ではなくutf8mb4
のutf8mb4_0900_ai_ci
のデフォルトの照合順序が表示される場合は、この新しいシステム変数がないと思われます。
オプション2
ドキュメントには、独自のUCA照合を定義するメカニズムが示されていますが、これを使用してデフォルトをオーバーライドできるかどうかは不明です。私はそれをテストすることはできませんが、調べる価値はあります:
utf8mb4
に追加しようとする誰かに関するMySQLフォーラムの質問)。 Xing Zhang氏の回答で問題が解決され、唯一の問題は照合IDにあるようです。これらすべてをまとめると、次のmightが機能します(ただし、テストする方法はありません)。
<charset name="utf8mb4">
<family>Unicode</family>
<description>UTF-8 MB4 Unicode</description>
<collation name="utf8mb4_unicode_ci" id="224">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="utf8mb4_general_ci" id="45">
<flag>compiled</flag>
</collation>
<collation name="utf8mb4_bin" id="46">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
<collation name="utf8mb4_unicode_520_ci" id="246">
<flag>compiled</flag>
</collation>
</charset>
今、ドキュメントは述べています:
照合ごとに一意のID番号を割り当てる必要があります。 1024から2047までのIDの範囲は、ユーザー定義の照合用に予約されています。現在使用されている照合IDの最大値を見つけるには、次のクエリを使用します。
SELECT MAX(ID) FROM INFORMATION_SCHEMA.COLLATIONS;
ただし、実際のIDを使用したのは、基本照合から始めて新しいルールを追加するのではなく、デフォルトを変更するだけであるという考えです。ここでIDを見つけました。
オプション3
他のすべてが失敗した場合、私はこの質問を次のMySQLフォーラムに投稿します。