「接続」とは、クライアントプログラムがサーバーに接続する際に確立されるセッションを指し、これによりサーバーとのやり取りが開始されます。クライアントはセッション接続を通じて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;