タイトル: 文字コードの確認
本稿は MariaDB / MySQL の文字コード (CHARSET) を確認する方法に関する記事です。本番で文字化けが起こったとき、もしくは新規構築時の整合性を確かめたいときに最初に走らせるコマンドです。
基本のコマンド
DB に接続した状態で以下を実行します。
| show variables like '%character%'; |
実行結果は次のような出力になります (例)。
| Variable_name | Value |
|---|---|
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | (パス) |
各変数の意味
| 変数 | 意味 |
|---|---|
character_set_client | クライアントが送ってくる SQL の文字コード |
character_set_connection | サーバ内で SQL を解釈する際の文字コード |
character_set_results | 結果セットをクライアントに返すときの文字コード |
character_set_database | 現在の DB の既定文字コード |
character_set_server | サーバの既定文字コード |
character_set_system | システムテーブル (内部) の文字コード |
照合順序 (Collation) もまとめて確認
| show variables like '%collation%'; |
主な変数: collation_connection / collation_database / collation_server
個別単位での確認
| 対象 | 確認方法 |
|---|---|
| データベース | SHOW CREATE DATABASE 名; |
| データベース (情報スキーマ) | SELECT schema_name, default_character_set_name, default_collation_name FROM information_schema.schemata; |
| テーブル | SHOW CREATE TABLE 名; |
| テーブル (情報スキーマ) | SELECT table_name, table_collation FROM information_schema.tables WHERE table_schema = 'myapp'; |
| カラム | SHOW FULL COLUMNS FROM 名; (Collation 列) |
| カラム (情報スキーマ) | SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_schema = 'myapp' AND table_name = 'users'; |
接続時に文字コードを指定する例
|
-- セッション単位で一括指定 (推奨) |
多くのドライバ (JDBC・PDO・mysqli) は接続文字列で charset=utf8mb4 を指定すれば自動で SET NAMES 相当を行います。
文字化けが発生したときのチェックリスト
show variables like '%character%';ですべてutf8mb4になっているか- テーブル・カラムの
SHOW CREATE TABLEで個別の Collation が古いutf8やlatin1になっていないか - アプリ側 (JDBC/PDO 接続URL等) の charset 指定
- HTTP レスポンスの
Content-Type: text/html; charset=UTF-8 - HTML の
<meta charset="UTF-8"> - ソースコードファイル自体の保存エンコーディング
注意点
- 古い MySQL 5.x では既定が
latin1。明示的にutf8mb4を指定しないと痛い目を見る utf8(3バイト) とutf8mb4(4バイト) は別物。絵文字や一部の漢字を扱うなら必ずutf8mb4- テーブル既定の Collation とカラム単位の Collation が混在すると、JOIN で「Illegal mix of collations」エラーが出る
- 既存テーブル・カラムの文字コード変換は重い。検証 DB で事前にリハーサル
- 本番運用中の変換はサービス停止を伴うことがある。メンテ枠で実施
関連
- 親カテゴリ: MySQL / MariaDB
- 関連: データベース関連 / テーブル関連 / SQL