MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  文字セット、照合順序、Unicode  /  アプリケーションの文字セットおよび照合順序の構成

10.5 アプリケーションの文字セットおよび照合順序の構成

デフォルトの MySQL 文字セットおよび照合順序 (utf8mb4utf8mb4_0900_ai_ci) を使用してデータを格納するアプリケーションの場合、特別な構成は必要ありません。 別の文字セットまたは照合順序を使用したデータストレージが必要なアプリケーションの場合は、次の複数の方法で、文字セット情報を構成できます。

  • データベースごとに文字設定を指定します。 たとえば、あるデータベースを使用するアプリケーションではデフォルトの utf8mb4 を使用し、別のデータベースを使用するアプリケーションでは sjis を使用できます。

  • サーバーの起動時に文字設定を指定します。 これにより、サーバーは、ほかの調整を行わないすべてのアプリケーションに、所定の設定を使用します。

  • ソースから MySQL を構築する場合は、構成時に文字設定を指定します。 これにより、サーバーの起動時に指定しなくても、サーバーは指定された設定をすべてのアプリケーションのデフォルトとして使用します。

異なるアプリケーションで別々の文字設定が必要な場合は、データベースごとの手法で十分対応できます。 ほとんどまたはすべてのアプリケーションで同じ文字セットを使用する場合は、サーバーの起動時または構成時に文字設定を指定する方法がもっとも便利です。

データベースごとの手法またはサーバー起動の手法では、設定によって、データストレージの文字セットが制御されます。 アプリケーションはまた、次の手順で説明するように、クライアントとサーバー間の通信に使用する文字セットをサーバーに知らせる必要もあります。

ここに示す例では、utf8mb4 および utf8mb4_0900_ai_ci のデフォルトの代替として、特定のコンテキストで latin1 文字セットおよび latin1_swedish_ci 照合順序を使用することを前提としています。

  • データベースごとに文字設定を指定します.  テーブルが特定のデフォルトの文字セットおよび照合順序をデータ記憶域に使用するようにデータベースを作成するには、次のような CREATE DATABASE ステートメントを使用します:

    CREATE DATABASE mydb
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;

    データベースで作成されたテーブルでは、文字カラムに latin1 および latin1_swedish_ci がデフォルトで使用されます。

    データベースを使用するアプリケーションは、接続するたびに、サーバーへの接続を構成する必要もあります。 これを行うには、接続後に SET NAMES 'latin1'ステートメントを実行します。 このステートメントは、接続方法 (mysql クライアント、PHP スクリプトなど) に関係なく使用できます。

    場合によっては、必要な文字セットを別の方法で使用するように接続を構成できます。 たとえば、mysql を使用して接続するには、--default-character-set=latin1 コマンドラインオプションを指定して、SET NAMES 'latin1'と同じ効果を得ることができます。

    クライアント接続の構成の詳細は、セクション10.4「接続文字セットおよび照合順序」を参照してください。

    注記

    ALTER DATABASE を使用してデータベースのデフォルトの文字セットまたは照合順序を変更する場合は、それらのデフォルトを使用するデータベース内の既存のストアドルーチンを削除して再作成し、新しいデフォルト値を使用する必要があります。 (ストアドルーチンでは、文字セットまたは照合順序が明示的に指定されていない場合、文字データ型を伴う変数は、データベースのデフォルトを使用します。 セクション13.1.17「CREATE PROCEDURE ステートメントおよび CREATE FUNCTION ステートメント」を参照してください。)

  • サーバーの起動時に文字設定を指定します.  サーバーの起動時に文字セットおよび照合順序を選択するには、--character-set-server および --collation-server オプションを使用します。 たとえば、オプションファイルでオプションを指定するには、次の行を含めます。

    [mysqld]
    character-set-server=latin1
    collation-server=latin1_swedish_ci

    これらの設定は、サーバー全体に適用され、任意のアプリケーションによって作成されたデータベースのデフォルトおよびこれらのデータベース内に作成されたテーブルのデフォルトとして適用されます。

    前述のように、アプリケーションは引き続き、接続したあとで SET NAMES または同等のステートメントを使用して、その接続を構成する必要があります。 接続するクライアントごとに SET NAMES が自動的に実行されるように、--init_connect="SET NAMES 'latin1'"オプションを使用してサーバーを起動することが一時的な場合があります。 ただし、CONNECTION_ADMIN 権限 (または非推奨の SUPER 権限) を持つユーザーに対して init_connect 値が実行されないため、これにより一貫性のない結果が生じる可能性があります。

  • MySQL の構成時に文字設定を指定します.  ソースから MySQL を構成および構築する場合に文字セットおよび照合順序を選択するには、DEFAULT_CHARSET および DEFAULT_COLLATION CMake オプションを使用します:

    cmake . -DDEFAULT_CHARSET=latin1 \
      -DDEFAULT_COLLATION=latin1_swedish_ci

    結果のサーバーでは、データベースおよびテーブルのデフォルトおよびクライアント接続として latin1 および latin1_swedish_ci が使用されます。 --character-set-server--collation-server を使用して、サーバー起動時にこれらのデフォルトを指定する必要はありません。 また、アプリケーションがサーバーに接続したあとで SET NAMES または同等のステートメントを使用して、その接続を構成する必要もありません。

アプリケーション用に MySQL 文字セットを構成する方法とは無関係に、これらのアプリケーションが実行する環境も考慮する必要があります。 たとえば、エディタで作成したファイルから取得した UTF-8 テキストを使用してステートメントを送信する場合は、ファイルエンコーディングが正しく、オペレーティングシステムで正しく処理されるように、環境のロケールを UTF-8 に設定してファイルを編集する必要があります。 端末ウィンドウ内から mysql クライアントを使用する場合、UTF-8 を使用するようにこのウィンドウを構成する必要があります。そのようにしないと、文字が正しく表示されない可能性があります。 Web 環境で実行するスクリプトの場合、このスクリプトは、MySQL Server とやり取りできるように文字のエンコーディングを正しく処理する必要があり、ページ内容の表示方法をブラウザが認識できるようにエンコーディングを正しく指定したページを生成する必要があります。 たとえば、次の <meta> タグを <head> 要素内に含められます。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

関連キーワード:  文字, セット, 照合, 順序, サーバー, アプリケーション, 構成, データベース, 接続, 設定