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