Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What is going on with this article?
@devzooiiooz

MySQLの照合順序を修正する

More than 5 years have passed since last update.

環境

Ubuntu14.04
Rails4.2.1
MySQL 5.5

照合順序(collation)のお話

Rails4.2でも相変わらずDBはMySQL派です。おはぎはつぶあん派です。

MySQLはちゃんと明示しとかないと照合順序が「utf8_unicode_ci」になってしまいます。
つまりWhere句で「ハハ」を検索しても「母」も「パパ」も「婆」も一緒になっちゃうよというお話です。
「utf8_general_ci」にしないといけない。

最初からちゃんとしなさいよ

こことか
ActiveRecordでデフォルトの照合順序を変更する
こことか
RailsのApplication Templateでmysqlのcollation設定を追加
ActiveRecordの初期値をちゃんと設定しなさいよ、とあります。

でももうやっちゃったんだけど…

じゃあ、テーブルを削除してやり直してください。

…って訳には簡単にいきませんよね。運用に乗っちゃってたり。
普通はそうですね。
僕もそうでした。なのでSQLコマンドで変更しましょう。

1.Railsアプリのルートでrails dbコマンドでdatabaseに接続
bundle exec rails db

2.該当のテーブルhogetableのカラムの属性を確認
mysql> SHOW FULL COLUMNS FROM hogetable¥G

変更したいカラムhogecolumnの属性が「utf8_unicode_ci」になっている

************************** 3. row ***************************
     Field: hogecolumn
      Type: text
 Collation: utf8_unicode_ci
      Null: YES
       Key: 
   Default: NULL
     Extra: 
Privileges: select,insert,update,references
   Comment: 

3.utf8_general_ciに変更します

mysql> ALTER TABLE hogetable MODIFY COLUMN hogecolumn TEXT COLLATE 'utf8_general_ci';

ここで注意する点はカラムの型(Type)を変更しない場合でも、指定してあげないとエラーになります。
上のコマンドでは「COLLATE」の前の「TEXT」がこのカラムの型です。VARCHARだったりする人は適宜変えてください。
なので2項で確認したTypeをもう一度設定してあげないとダメです。

4.ちゃんと確認

mysql> SHOW FULL COLUMNS FROM hogetable¥G

*************************** 3. row ***************************
     Field: hogecolumn
      Type: text
 Collation: utf8_general_ci
      Null: YES
       Key: 
   Default: NULL
     Extra: 
Privileges: select,insert,update,references
   Comment: 

うむ。ちゃんと変更されているな!

参考

照合順序をutf8_general_ciからutf8_unicode_ciへ変更する

36
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
devzooiiooz
Ruby on Railsの開発が主です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
36
Help us understand the problem. What is going on with this article?