MySQLでは、照合は多くのレベルで適用できます。サーバーレベル、接続レベル、データベースレベル、テーブルレベル、さらには列レベルでも適用できます。データベース、テーブル、または列レベルで適用された照合を上書きする照合をクエリで指定することもできます。
これらの各レベルで適用されている照合を確認する方法は次のとおりです。
接続、サーバー、およびデータベースの照合のショートカット
接続、サーバー、データベースの照合情報を取得する最も簡単な方法は、次のステートメントを使用することです。このステートメントは、collation
で始まるすべてのシステム変数を返します。 :
SHOW VARIABLES LIKE 'collation%';
これにより、サーバー、接続、およびデータベースの照合が返されます。このように:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_0900_ai_ci | | collation_database | utf8_general_ci | | collation_server | utf8mb4_0900_ai_ci | +----------------------+--------------------+>
必要に応じて、これらの各システム変数を個別に返すこともできます。その方法については、以下をご覧ください。
サーバーレベルの照合
次のコマンドを実行すると、サーバーのデフォルトの照合が返されます。
SELECT @@collation_server;
結果の例:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_0900_ai_ci | +--------------------+
接続レベルの照合
MySQLデータベースに対してクエリを実行すると、MySQLは一連のシステム変数を使用して、クエリが実行されるたびに使用する文字セットと照合を決定します。クライアントがサーバーに対して異なる文字セットを使用している場合、MySQLはそれを適切な文字セットと照合に変換できます。
クエリ結果をクライアントに送り返すとき、MySQLは必要に応じてこれらの結果を別の文字セットに完全に変換して戻すことができます。 MySQLはシステム変数を使用して、これらの各ステップで使用する文字セットと照合を決定します。
以下は、接続の照合を選択します(どのシステム変数にも同じ構文を使用できます):
SELECT @@collation_connection;
結果の例:
+------------------------+ | @@collation_connection | +------------------------+ | utf8mb4_0900_ai_ci | +------------------------+
次のクエリを使用して、すべての文字セットシステム変数を返すこともできます。
SHOW VARIABLES LIKE 'character_set%';
結果の例:
+--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+
データベースレベルの照合
次のステートメントを使用して、特定のデータベースの照合を確認できます。
USE Music; SELECT @@character_set_database, @@collation_database;
結果の例:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8 | utf8_general_ci | +--------------------------+----------------------+
または、次のステートメントを使用することもできます(これにより、デフォルトのデータベースを変更する必要がなくなります):
SELECT default_character_set_name, default_collation_name FROM information_schema.schemata WHERE schema_name = 'Music';
結果の例:
+----------------------------+------------------------+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +----------------------------+------------------------+ | utf8 | utf8_general_ci | +----------------------------+------------------------+
テーブルレベルの照合
次のステートメントを実行すると、一致するテーブルに関する情報を提供する一連の列が返されます。これらの列の1つは Collation と呼ばれます 、および一致するすべてのテーブルの照合を提供します。
SHOW TABLE STATUS LIKE '%Artists%';
もちろん、%Artists%
を置き換える必要があります 独自のテーブル名を使用します。また、パーセント記号が必要でないと思われる場合は、パーセント記号を省略できます。このステートメントは、FROM
などの他の句も受け入れます。 、WHERE
、およびIN
、したがって、これにより、ステートメントを作成するときにいくつかのオプションが提供されます。
前のステートメントの問題の1つは、多くの列が返されることであり、照合列を見つけるために横にスクロールしなければならない場合があります。照合情報のみに関心がある場合は、information_schema.tables
にクエリを実行できます。 。必要に応じて、特定のデータベース内のすべてのテーブルの照合を返すこともできます。その方法は次のとおりです。
SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_schema = 'Music';
結果の例:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION | +--------------+------------+-----------------+ | Music | Albums | utf8_general_ci | | Music | Artists | utf8_general_ci | | Music | Genres | utf8_general_ci | +--------------+------------+-----------------+
列レベルの照合
次のクエリを実行すると、特定のテーブルの各列に関する情報が返されます。これには照合情報が含まれます。
SHOW FULL COLUMNS FROM Artists;
その結果、照合を含む、列に関するあらゆる種類の情報を含む多くの列が返されます。
これを行うことで、返される列の数を減らすことができます:
SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_name = 'Artists';
結果の例:
+-------------+--------------------+-----------------+ | COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME | +-------------+--------------------+-----------------+ | ArtistId | NULL | NULL | | ArtistName | utf8 | utf8_spanish_ci | | ActiveFrom | NULL | NULL | +-------------+--------------------+-----------------+
SHOW CREATE TABLE
を実行することもできます テーブル(その列を含む)の定義を表示するステートメント。
SHOW CREATE TABLE Artists;
これは次のようなものを返します:
+---------+--------------------------------+ | Table | Create Table | +---------+--------------------------------+ | Artists | CREATE TABLE `Artists` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT NULL, PRIMARY KEY (`ArtistId`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 | +---------+--------------------------------+
ただし、文字セットと照合情報は、テーブルのデフォルトの照合と異なる場合にのみ返されます。この例では、ArtistName
を明示的に設定します デモの目的で別の照合に列を追加します(そうでない場合、照合情報は返されませんでした)。