MySQLでの文字化け原因と対処方法 (Linux前提 cloud9での例)

Git

MySQLでの文字化けが発生した場合の対処方法(Linux)

cloud9 でのmysql で文字化けを起こしている場合の調査方法は下記コマンドで調査してみましょう

MySQL環境設定

確認方法

コマンドは show variables like “chara%”;   で調査します。
Valueが character_set_filesystem 以外が utf8 であればOKです。

下記のように”latin1″で設定されている場合は変更が必要です。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

各種設定は下記の意味があります。

character_set_client    : クライアント側で発行したsql文はこの文字コードになる character_set_connection  : クライアントから受け取った文字をこの文字コードへ変換する character_set_database       : 現在参照しているDBの文字コード character_set_results           : クライアントへ送信する検索結果はこの文字コードになる character_set_server            : DB作成時のデフォルトの文字コード character_set_system          : システムの使用する文字セットで常にutf8が使用されている

対処方法(設定変更)

/etc/mysql/my.cnfをvimかviで開き
該当セクションに以下を追記する。

※ sudo vi /etc/mysql/my.cnf

[mysqld]
...
character-set-server=utf8 #mysqldセクションの末尾に追加

[client]  
default-character-set=utf8 #clientセクションを追加

その後、mysqlを再始動

mysql-ctl restart

改めて文字コードを調べて、以下となっていれば成功

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

既にテーブルが作成されてた場合の文字コード変更方法

テーブルを削除(drop table) し新たにテーブルを作成しなおすことを進めるが文字コード変更するSQLもある。

対処方法

ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8;

 

確認方法(person はテーブル名の例)

mysql> show create table person \G;
*************************** 1. row ***************************
       Table: person
Create Table: CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

DEFAULT CHARSET=utf8
とutf8 へ変更されているか確認する。

補足)テーブル、カラム単位の文字コード設定は下記サイトを紹介いたします

ここ

一連のコマンド例

<pre class="lang:default decode:true">sutaruhin:~/workspace/tl $ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 5.5.53-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| booklist           |
| bookstore          |
| c9                 |
| kadaidb            |
| message-board      |
| microposts         |
| mysql              |
| performance_schema |
| phpmyadmin         |
| tasklist           |
+--------------------+
11 rows in set (0.00 sec)

mysql> use kadaidb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_kadaidb |
+-------------------+
| person            |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from person;
+----+--------+------+---------------------+
| id | name   | age  | created_at          |
+----+--------+------+---------------------+
|  1 | 太郎   |   30 | 2017-01-10 09:12:41 |
+----+--------+------+---------------------+
1 row in set (0.00 sec)

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> show create table person \G;
*************************** 1. row ***************************
       Table: person
Create Table: CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

Git
スポンサーリンク
sutaruhinをフォローする
システム・スタルヒン合同会社
タイトルとURLをコピーしました