MariaDBでは、照合はさまざまなレベルで適用できます。照合は、サーバーレベル、接続レベル、データベースレベル、テーブルレベル、さらには列レベルでも適用できます。
クエリレベルで照合を指定して、データベース、テーブル、または列レベルで適用された照合を上書きすることもできます。
MariaDBには、さまざまなレベルで照合を返すためのオプションがいくつか用意されています。
接続、サーバー、およびデータベースの照合を表示する
SHOW VARIABLES
を使用できます LIKE
を含む管理ステートメント 名前に特定の文字列を含む変数を返す句。
例:
SHOW VARIABLES LIKE 'collation%';
結果の例:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+>
これらは、テスト環境で得られた結果です。得られる結果は、設定によって異なります。
これらの個別の変数はそれぞれ、必要に応じて個別に返すことができます(以下を参照)。
デフォルトでは、SHOW VARIABLES
はSESSION
を示しています 変数。この場合、現在の接続に対して有効な値を返します。
したがって、前の例は次のように書き直すことができます。
SHOW SESSION VARIABLES LIKE 'collation%';
結果の例:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+>
または、SESSION
を置き換えることもできます LOCAL
を使用 (これはSESSION
の同義語です ):
SHOW LOCAL VARIABLES LIKE 'collation%';
GLOBAL
を使用することもできます MariaDBへの新しい接続に使用される値を表示する修飾子。
例:
SHOW GLOBAL VARIABLES LIKE 'collation%';
結果の例:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+>
サーバー照合
次のコマンドは、サーバーのデフォルトの照合を返します。
SELECT @@collation_server;
結果の例:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_general_ci | +--------------------+
接続レベルの照合
MariaDBデータベースに対してクエリを実行すると、MariaDBは一連のシステム変数を使用して、クエリが実行されるたびに使用する文字セットと照合を決定します。クライアントがサーバーに対して別の文字セットを使用している場合、MariaDBはそれを適切な文字セットと照合に変換できます。
クエリ結果をクライアントに送り返すときに、MariaDBは、必要に応じて、これらの結果を別の文字セットに完全に変換して戻すことができます。 MariaDBは、システム変数を使用して、これらの各ステップで使用する文字セットと照合を決定します。
以下は、接続の照合を選択します(どのシステム変数にも同じ構文を使用できます):
SELECT @@collation_connection;
結果の例:
+------------------------+ | @@collation_connection | +------------------------+ | utf8_general_ci | +------------------------+
次のクエリを使用して、すべての文字セットシステム変数を返すこともできます。
SHOW VARIABLES LIKE 'character_set%';
結果:
+--------------------------+--------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/Cellar/mariadb/10.5.9/share/mysql/charsets/ | +--------------------------+--------------------------------------------------------+
データベースレベルの照合
次のステートメントを使用して、特定のデータベースの照合を確認できます。
USE PetHouse;
SELECT @@character_set_database, @@collation_database;
結果の例:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8mb4 | utf8mb4_general_ci | +--------------------------+----------------------+
別の方法は、次のようなステートメントを使用することです。
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'PetHouse';
結果の例:
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | utf8mb4 | utf8mb4_general_ci | +----------------------------+------------------------+
この2番目の方法を使用すると、データベースを切り替えることなく結果を取得できます。
ここでは別のデータベースを使用しています:
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'test';
結果の例:
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | latin1 | latin1_swedish_ci | +----------------------------+------------------------+
これは、MariaDBを最初にインストールしたときに作成されたテストデータベースです。
テーブルレベルの照合
次のステートメントは、一致するテーブルに関する情報を提供するいくつかの列を返します。これらの列の1つは Collation と呼ばれます 、および一致するすべてのテーブルの照合を提供します。
SHOW TABLE STATUS LIKE '%Pets%';
結果の例(垂直出力を使用):
*************************** 1. row *************************** Name: Pets Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 8 Avg_row_length: 2048 Data_length: 16384 Max_data_length: 0 Index_length: 32768 Data_free: 0 Auto_increment: NULL Create_time: 2021-03-30 09:10:38 Update_time: 2021-03-30 09:16:39 Check_time: NULL Collation: utf8mb4_general_ci Checksum: NULL Create_options: Comment: Max_index_length: 0 Temporary: N
この場合、Pets
というテーブルに関する情報を取得しました 。 Collation
列にutf8mb4_general_ci
が含まれています 、これはテーブルの照合です。
このステートメントは、FROM
などの他の句も受け入れます。 、WHERE
、およびIN
、したがって、これにより、ステートメントを作成するときにいくつかのオプションが提供されます。
テーブルに関する照合情報を取得する別の方法は、information_schema.tables
に対してクエリを実行することです。 :
SELECT
table_schema,
table_name,
table_collation
FROM information_schema.tables
WHERE table_schema = 'PetHouse';
結果の例:
+--------------+---------------+--------------------+ | table_schema | table_name | table_collation | +--------------+---------------+--------------------+ | pethouse | vpettypecount | NULL | | pethouse | Pets | utf8mb4_general_ci | | pethouse | Owners | utf8mb4_general_ci | | pethouse | PetTypes | utf8mb4_general_ci | +--------------+---------------+--------------------+
列レベルの照合
次のクエリを実行すると、Pets
の各列に関する情報が返されます。 テーブル。これには照合情報が含まれます。
SHOW FULL COLUMNS FROM Pets;
結果の例:
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+ | PetId | int(11) | NULL | NO | PRI | NULL | | select,insert,update,references | | | PetTypeId | int(11) | NULL | NO | MUL | NULL | | select,insert,update,references | | | OwnerId | int(11) | NULL | NO | MUL | NULL | | select,insert,update,references | | | PetName | varchar(60) | utf8mb4_general_ci | NO | | NULL | | select,insert,update,references | | | DOB | date | NULL | YES | | NULL | | select,insert,update,references | | +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
または、information_schema.columns
をクエリすることもできます 。この場合、関心のある列だけを選択できます:
SELECT
column_name,
character_set_name,
collation_name
FROM information_schema.columns
WHERE table_name = 'Pets';
結果の例:
+-------------+--------------------+--------------------+ | column_name | character_set_name | collation_name | +-------------+--------------------+--------------------+ | PetId | NULL | NULL | | PetTypeId | NULL | NULL | | OwnerId | NULL | NULL | | PetName | utf8mb4 | utf8mb4_general_ci | | DOB | NULL | NULL | +-------------+--------------------+--------------------+
ツールキットにあるもう1つのオプションは、CREATE TABLE
をチェックアウトすることです。 私たちのテーブルのステートメント。
このように:
SHOW CREATE TABLE Pets;
結果:
+-------+------------------------------+ | Table | Create Table | +-------+------------------------------+ | Pets | CREATE TABLE `Pets` ( `PetId` int(11) NOT NULL, `PetTypeId` int(11) NOT NULL, `OwnerId` int(11) NOT NULL, `PetName` varchar(60) NOT NULL, `DOB` date DEFAULT NULL, PRIMARY KEY (`PetId`), KEY `PetTypeId` (`PetTypeId`), KEY `OwnerId` (`OwnerId`), CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`), CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +-------+-------------------------------+
ただし、文字セットと照合情報は、テーブルのデフォルトの照合と異なる場合にのみ返されます。この例では、照合情報はしませんでした 異なるため、照合情報は返されませんでした。
照合を変更しましょう:
ALTER TABLE Pets
MODIFY PetName VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;
そして、SHOW CREATE TABLE
を実行します もう一度:
SHOW CREATE TABLE Pets;
結果:
+-------+------------------------------+ | Table | Create Table | +-------+------------------------------+ | Pets | CREATE TABLE `Pets` ( `PetId` int(11) NOT NULL, `PetTypeId` int(11) NOT NULL, `OwnerId` int(11) NOT NULL, `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `DOB` date DEFAULT NULL, PRIMARY KEY (`PetId`), KEY `PetTypeId` (`PetTypeId`), KEY `OwnerId` (`OwnerId`), CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`), CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +-------+-------------------------------+
今回は、PetName
に対する新しい文字セットと照合設定を確認できます。 列。