LoginSignup
7
8

More than 5 years have passed since last update.

MySQL 文字化けの時に確認すべきところメモ

Posted at

はじめに文字化けしないために

MySQLで日本語周りの設定に時間を要したのでメモ。要点としては下記。

  • DB作成前に目的の文字コードを事前に決めて各my.iniのデフォルト値を設定しておく。
  • プログラム側でもDBにアクセスする際の文字コードを共通の設定にしておく。
  • Windowsコマンドプロンプトではcp932を使う。

my.ini の設定

下記の記事に助けられた。

出典:https://qiita.com/KawabataLemon/items/0edff5bd9b61368bedae
引用:「ポイントは、mysqldだけdefault-character-setではない」

my.ini

[client]
default-character-set=cp932
・・・

[mysql]
default-character-set=utf8
・・・

[mysqldump]
default-character-set=utf8
・・・

[mysqld]
character-set-server=utf8
・・・

文字化けの時に確認すべきところ

my.iniでデフォルト値を設定しても、各データベースごと、各テーブルごと、に独自の文字コードを持てるので文字化けの際はそれぞれ確認が必要。

プログラムとMYSQLの文字コードに差異があった場合などにも意図しない文字コードになってしまうことがあった。

サーバデフォルトの設定

サーバデフォルトの設定
MariaDB [test2]> 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:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

データベースごとの設定

データベース
MariaDB [test2]> show create database test2;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| test2    | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

テーブル毎の設定

テーブル毎の設定
MariaDB [test2]> show create table auth_group;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                               |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auth_group | CREATE TABLE `auth_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

-- CHARSET=utf8 となっている

文字化けなおらないとき

  • コマンドプロンプトで文字化けしている場合は下記を試す。
    • mysql -u root test2 --default-character-set=sjis
    • ↑のコマンドで、そのセッションに限り出力エンコードをcp932にする。
  • dropして作り直す。
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8