「接続」とは、クライアントプログラムがサーバーに接続する際に確立されるセッションを指し、これによりサーバーとのやり取りが開始されます。クライアントはセッション接続を通じてSQL文(例えばクエリ)を送信します。サーバーは接続を通じて応答(例えば結果セットやエラーメッセージ)をクライアントに送り返します。
文字セットと照合順序のシステム変数
以下の文字セットと照合順序のシステム変数は、クライアントとサーバー間のやり取りに関連しています:
character_set_serverおよびcollation_serverシステム変数は、サーバーの文字セットと照合順序を指定します。character_set_databaseおよびcollation_databaseシステム変数は、データベースのデフォルト文字セットと照合順序を指定します。
さらに、サーバーは以下のシステム変数も使用します:
character_set_clientシステム変数は、クライアントが送信するステートメントの文字セットを設定するために使用されます。character_set_connectionシステム変数は、受信したステートメントを変換するための文字セットを設定するために使用されます。サーバーは、クライアントから送信されたステートメントをcharacter_set_clientからcharacter_set_connectionに変換します。collation_connectionシステム変数は、接続で使用される文字セットと照合順序を設定するために使用されます。collation_connectionは文字列の比較に重要です。character_set_resultsシステム変数は、サーバーがクライアントに返すクエリ結果の文字セットを設定するために使用されます。これには、データ結果(例えば列値)、メタデータ(例えば列名)、およびエラーメッセージが含まれます。結果セットまたはエラーメッセージの変換を実行しない場合は、character_set_resultsをNULLまたはバイナリに設定してください。構文は次のとおりです:SET character_set_results = NULL; SET character_set_results = binary;
次のステートメントは、すべての文字セットと照合順序のシステム変数を確認するために使用できます:
obclient> SHOW SESSION VARIABLES LIKE 'character\_set\_%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb4 |
+--------------------------+---------+
7 rows in set
obclient> SHOW SESSION VARIABLES LIKE 'collation\_%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set
クライアント文字セットを設定するSQLステートメント
接続が確立された後、クライアントは現在のセッションの文字セットと照合順序を変更するシステム変数を変更できます。次の SET ステートメントを使用してこれらの変数を変更できます:
SET NAMES 'charset_name'ステートメント。今後のリクエストでクライアントが使用する文字セットを設定します。以下の3つのステートメントと同じです:
SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;collation_connectionに使用する照合順序を指定するには、COLLATE句を追加してください:SET NAMES 'charset_name' COLLATE 'collation_name'SET CHARACTER SET 'charset_name'ステートメント。SET NAMESと似ていますが、character_set_connectionとcollation_connectionをデフォルトのデータベースの文字セットと照合順序であるcharacter_set_databaseとcollation_databaseに設定します。以下の3つのステートメントと同じです:SET character_set_client = charset_name; SET character_set_results = charset_name; SET collation_connection = @@collation_database;