MySQLの文字コードなどを調査するのに便利なコマンドです。

「MySQLで文字化けする」なんて時に使えるかもしれません…

文字コードをさくっと確認

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.6.43, for Win64 (x86_64)

Connection id:          44
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.6.43-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    cp932
Conn.  characterset:    cp932
TCP port:               3306
Uptime:                 21 min 41 sec

Server characterset: MySQLサーバーの文字コード
Db characterset: DB作成時の文字コード
Client characterset: クライアントの文字コード
Conn. characterset: コネクションの文字コード

環境変数から確認

mysql> SHOW VARIABLES like "char%";
+--------------------------+---------------------------+
| Variable_name            | Value                     |
+--------------------------+---------------------------+
| character_set_client     | cp932                     |
| character_set_connection | cp932                     |
| character_set_database   | utf8                      |
| character_set_filesystem | binary                    |
| character_set_results    | cp932                     |
| character_set_server     | utf8                      |
| character_set_system     | utf8                      |
| character_sets_dir       | C:\MySQL\share\charsets\  |
+--------------------------+---------------------------+

character_set_client:クライアント側の文字コード
character_set_connection:クライアントから受けたSQLを変換
character_set_database:データベースで使用される文字
character_set_filesystem:ファイルシステムの文字セット
character_set_results:クライアントに返す時の文字コード
character_set_server:サーバーのデフォルト文字コード
character_set_system:識別子を格納するために使用される文字コード
character_sets_dir:文字セットがインストールされている場所

コレクション(照合)を確認

mysql> SHOW VARIABLES like "coll%";
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | cp932_japanese_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+

collation_connection:接続文字セットの照合順序
collation_database:デフォルトデータベースで使用される照合
collation_server:サーバーのデフォルトの照合順序

データベースの文字コード確認

既に作成してあるデータベースの文字コードを確認する。

mysql> SHOW CREATE DATABASE test;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+

データベース名testの文字コードはutf8であることがわかる。

ちなみに、DB作成時に文字コードを指定するには「CHARCTER SET」を付ける。

CREATE DATABASE db1 CHARACTER SET utf8;

テーブルの文字コード確認

既に作成してあるテーブルの文字コードを確認する。

mysql> SHOW CREATE TABLE test;
+-------+-----------------------------+
| Table | Create Table                |
+-------+-----------------------------+
| test  | CREATE TABLE `test` (
  `no` int(11) DEFAULT '0',
  `name` varbinary(100) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------+

テーブル名testの文字コードはCHARSET=utf8でutf8であることがわかる。

まとめ

MySQLの文字コードはいろんなところにあります。

文字化けが起こったら1つ1つどうなっているか調べなくてはいけません。

mysql8.0.1からはutf8mb4がデフォルトになったようです。