文字コードの確認と設定

Tag:

文字コードが異なれば、同じ文字であっても異なる値が割り当てられます。例えば、全角の「あ」はシフトJISでは「0x82A0」ですが、UTF-8では「0xE38182」です。そのため、文字コードの指定に不備があると文字化けが発生します。

MySQLでは、クライアント文字コード、サーバ文字コードを別々に設定します。

文字コード指定単位 役割
クライアント文字コード クライアントがデータの送受信に使用する文字コード
サーバー文字コード 文字データを内部的に表現するための文字コード

クライアント側、サーバ側で異なる文字コードを指定している場合、MySQLの機能により文字コードの変換処理が行われます。

文字コードの確認

設定されている文字コードは、下記のSQL文で確認できます。

SHOW VARIABLES LIKE 'char%';

クライアント文字コードの設定

クライアント文字コードをutf8にしたい場合、/etc/my.cnfに下記指定を行う。

[mysql]
default-character-set=utf8

SQLでも設定可能。下記どちらかのSQLを実施。

/* 指定方法1 */
SET NAMES utf8

/* 指定方法2 */
SET CHARACTER SET utf8

サーバ文字コードの設定

インスタンス、データベース、テーブル、列の4種類のレベルで文字コードを指定できます。列の文字コードが指定されていなければ、テーブルの文字コード。テーブルの文字コードが指定されていなければ、データベースの文字コード。データベースの文字コードもしてされていなければ、インスタンスの文字コードが割り当てられます。

優先順位 レベル 設定方法
1 CREATE / ALTER TABLE文で指定
2 テーブル CREATE / ALTER TABLE文で指定
3 データベース CREATE / ALTER DATABASE文で指定
4 インスタンス 初期化パラメータdefault-character-set で指定

スポンサーリンク