12.

文字コードの確認

編集

本稿は MariaDB / MySQL の文字コード (CHARSET) を確認する方法に関する記事です。本番で文字化けが起こったとき、もしくは新規構築時の整合性を確かめたいときに最初に走らせるコマンドです。

基本のコマンド

DB に接続した状態で以下を実行します。

show variables like '%character%';

実行結果は次のような出力になります (例)。

Variable_nameValue
character_set_clientutf8mb4
character_set_connectionutf8mb4
character_set_databaseutf8mb4
character_set_filesystembinary
character_set_resultsutf8mb4
character_set_serverutf8mb4
character_set_systemutf8
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';

接続時に文字コードを指定する例

-- セッション単位で一括指定 (推奨)
SET NAMES utf8mb4;

-- 個別変数で指定
SET character_set_client     = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results    = utf8mb4;

多くのドライバ (JDBC・PDO・mysqli) は接続文字列で charset=utf8mb4 を指定すれば自動で SET NAMES 相当を行います。

文字化けが発生したときのチェックリスト

  1. show variables like '%character%'; ですべて utf8mb4 になっているか
  2. テーブル・カラムの SHOW CREATE TABLE個別の Collation が古い utf8latin1 になっていないか
  3. アプリ側 (JDBC/PDO 接続URL等) の charset 指定
  4. HTTP レスポンスの Content-Type: text/html; charset=UTF-8
  5. HTML の <meta charset="UTF-8">
  6. ソースコードファイル自体の保存エンコーディング

注意点

  • 古い MySQL 5.x では既定が latin1。明示的に utf8mb4 を指定しないと痛い目を見る
  • utf8 (3バイト) と utf8mb4 (4バイト) は別物。絵文字や一部の漢字を扱うなら必ず utf8mb4
  • テーブル既定の Collation とカラム単位の Collation が混在すると、JOIN で「Illegal mix of collations」エラーが出る
  • 既存テーブル・カラムの文字コード変換は重い。検証 DB で事前にリハーサル
  • 本番運用中の変換はサービス停止を伴うことがある。メンテ枠で実施

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ダウンロード&インストール方法(Windows)
  2. インストール方法(Linux)
  3. コマンド一覧
  4. SQL
  5. データ型
  6. 関数
  7. 管理ツール
  8. 設定
  9. パフォーマンスチューニング関連
  10. エクスポートおよびインポート
  11. エラー&トラブル
  12. 文字コードの確認
  13. 実行中の SQL の状態確認およびプロセスキルの方法
  14. パスワードの無効化設定
  15. root ユーザーの初期パスワード確認方法
  16. rootユーザーのパスワード変更方法
  17. LIMIT, OFFSET の始まりと挙動
  18. mysqlのバージョン確認方法
  19. 実行計画の表示方法
  20. レプリケーションのステータス確認方法
  21. 中央値の導き方(バージョン8未満)
  22. 階層SQL(バージョン8未満)
  23. パーセンタイルの導き方
  24. 特定スキーマの全テーブルの全カラム情報を取得する方法
  25. MySQLで文字列の置換をする方法