概要
環境
Virtual Box/Ubuntu 18.04 LTS/MySQL 5.7
やりたいこと
日本語をvarcharのカラムに格納したいが、エラーになるのをなんとかしたい。
戻ってくるエラーは以下のような感じ。(不正確)
SQL Error [1366] [HY000]: Incorrect string value: なんちゃらかんちゃら for column ほげほげ at row 1
ここでお帰りになるべき方
以下をご存じの方は、ここでお帰りください。
- MySQLはカラムにも文字コードがあり、テーブル作成済みなら当然染みてる。
ことの発端
Node.js/MySQLでSequelizeを使おうとして、クライアントコマンドからmigrationファイルを作って適当にテーブル作ってたらはまった。
手順
必要な状態
これで、
mysql> status;
この状態
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
これで
mysql> show variables like 'char%';
この状態
+--------------------------+----------------------------+
| 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)
手順
Google先生に聞けば、いくつも引っかかるので肝心の手順は割愛。
基本的には、設定ファイルに以下のような設定をして回る感じ。
default-character-set = utf8
一つだけ、
character-set-server=utf8
こんな感じのがあった気がする...
確認
で、再起動しても当然すでに作ってあるものはことごとくUTF-8ではない。
なので、ことごとくUTF-8に変更して回る。
DBとかテーブルとか、、、でも、エラーは解消せず。が、今日のハマリポイント。
** カラムも忘れず変更しましょう。 **
誰かの記事で、散々チェックして直らなくて、作り直したら上手くいったという報告を見かけたが、多分これ系の話かな?
まとめ
カラムにも文字コード(ってかキャクター・セットとキャラクター・エンコーディングはごちゃ混ぜ?)あるんだな。つーか、今時デフォルトがlatin1ってなんだよ。