Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

データベースでつまずいた

Cakephpの勉強を始めてみたら
意外とデータベースの設定でつまずいた。

というか、ただ文字コードを変更していなかっただけだけどw


cakephpでブログを作るチュートリアルに沿って、
データベースにブログの記事を挿入しようとしたときに、

mysql> INSERT INTO posts (title,body,created)     VALUES ('タイトルの逆襲', 'こ りゃ本当にわくわくする!うそ。', NOW());
ERROR 1366 (HY000): Incorrect string value: '\xE3\x82\xBF\xE3\x82\xA4...' for column 'title' at row 1

こんな感じのエラーが出てきた。

調べてみると、どうやら文字コードがあってないらしいので、
show variablesで調べてみると

mysql> show variables like 'char%';
+--------------------------+-----------------------------------------------------+
| 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/local/mysql-5.6.10-osx10.7-x86/share/charsets/ |
+--------------------------+-----------------------------------------------------+

こんな感じになってた。

データベースのエンコードがlatin1になってたのが原因だったので、
これを

set global character_set_server = utf8

というコマンドを打ってutf-8に変更した。

mysql> set global character_set_server = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set global character_set_database = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'char%';
+--------------------------+-----------------------------------------------------+
| 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     | utf8                                                |
| character_set_system     | utf8                                                |
| character_sets_dir       | /usr/local/mysql-5.6.10-osx10.7-x86/share/charsets/ |
+--------------------------+-----------------------------------------------------+


どうやら、問題のデータベースは既に文字コードが設定されてるせいか反映されていない。

後から変更しても、既にあるものには反映されないようなので
どうしようか考えていろいろみました。

データベースの文字エンコーディングを変更する - HHeLiBeXの日記 正道編

MySQL の文字コード設定を後から変えるには 民芸的プログラミング 〜ソフトウェア開発日記〜/ウェブリブログ

この辺をみて、コマンド一発で変えちゃえ☆みたいな簡単な話じゃなかったので
とりあえず、一度データベースごとdropしてもう一回作り直しました!

これでやっとまともにcakephpの開発ができる環境がそろいました!

めでたしめでたし