デフォルトの MySQL 文字セットおよび照合順序 (utf8mb4
、utf8mb4_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" />