1. 導入: なぜ照合順序の設定が重要なのか
データベース設計において、文字コードの指定に注力する方は多いですが、「照合順序(Collation)」の選定を軽視してしまうと、運用フェーズで予期せぬトラブルに直面することがあります。照合順序とは、データの「比較」や「並び替え」のルールを定義するものです。例えば、大文字小文字を区別するか、ひらがなとカタカナを同一視するかといった挙動がこれで決まります。本稿では、MariaDBの設定ファイル(my.ini/my.cnf)を用いて、システム全体のデフォルト照合順序を正しく制御する方法を解説します。
2. 基礎知識: 照合順序の役割
照合順序は、選択した文字コード(Charset)とセットで機能します。特に重要なのは、以下の2つの末尾文字です。
・_ci (Case Insensitive): 大文字と小文字を区別しない(例: ‘A’ と ‘a’ は等しいと判定される)。
・_bin (Binary): バイナリ値として比較するため、バイト単位で厳密に比較する(大文字小文字やアクセント記号を厳密に区別する)。
デフォルトでは `utf8mb4_general_ci` などが選ばれることが多いですが、アプリケーションの要件(検索の柔軟性やソート順の厳密さ)に応じて適切に選択する必要があります。
3. 実装/解決策: 設定ファイルへの記述
MariaDBの設定ファイル(Windowsなら my.ini、Linuxなら my.cnf)の [mysqld](または [mariadbd])セクションに、以下のように記述します。
[mysqld]
文字コードをutf8mb4に設定
character-set-server=utf8mb4
サーバー全体のデフォルト照合順序を指定
collation-server=utf8mb4_general_ci
この設定を行うことで、データベース作成時に文字コードと照合順序を省略した場合、ここで定義したルールが適用されます。
4. サンプルプログラム: 設定と確認のSQL
以下は、現場で頻出する照合順序の確認・変更手順をまとめたSQLスクリプトです。
/ 現在のサーバーの文字コードと照合順序を確認 /
SHOW VARIABLES LIKE ‘character_set_server’;
SHOW VARIABLES LIKE ‘collation_server’;
/ utf8mb4で利用可能な照合順序一覧を表示 /
SHOW COLLATION WHERE charset = ‘utf8mb4’;
/ 特定のDBを作成し、デフォルト設定が反映されているか確認 /
CREATE DATABASE test_db;
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = ‘test_db’;
/
注意:データベース作成時に「CHARACTER SET utf8mb4」のみを指定すると、
設定ファイルの値に関わらず、その文字コードの標準的な照合順序が優先されます。
明示的に指定したい場合は、以下のように記述してください。
/
CREATE DATABASE strict_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
5. 応用・注意点: 現場で陥りやすい罠
現場で最も注意すべき点は、「データベース作成時の省略」です。設定ファイルで `collation-server` を指定していても、CREATE DATABASE文で文字コードだけを明示的に指定すると、その文字コードの標準照合順序に上書きされてしまいます。
また、本番環境で稼働中のデータベースの照合順序を後から変更すると、インデックスの再構築が必要になり、パフォーマンスに大きな影響を与えます。新規プロジェクト構築時に、アプリケーションの検索要件(大文字小文字を区別すべきか等)を開発チームとしっかり合意し、初期段階で一貫性のある設定を行うことが、DBAにとって最も重要なリスク管理となります。

コメント