1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MySQL】WHERE句でひらがな/カタカナが区別されない

Posted at

SELECT結果がなんかおかしかった

テーブル(仮)

id name
1 テスト
2 テスト
3 てすと
3 test

SELECT * FROM test WHERE name = 'テスト';

id name
1 テスト
2 テスト
3 てすと

WHEREって完全一致だと思ってたので、ひらがな/カタカナが区別されていないことに動揺。
調べてみるとCollationの設定が関係しているらしい??
MySQLを使って2年目で初めてCollationというものを知りました(それまでは気にしたことがなかった)

Collationとは

各データベースにはデータベース文字セットとデータベース照合順序があります。

ここでいうデータベース照合順序がCollationのことで、
データに含まれるの文字を比較するときにどの文字を区別してどの文字を同じものと見なすか?という設定のようなもの(らしい)
サーバレベル、データベースレベル、テーブルレベル、カラムレベルそれぞれで設定できる(らしい)

じゃあ今のCollationを確認してみます

Collationの確認方法

データベース

SELECT @@character_set_database, @@collation_database;

テーブル

show table status from [DB];

カラム

SHOW FULL COLUMNS FROM test;

上記のテーブルはutf8mb4_unicode_ciになっていました。(だからSELECT結果がおかしく見えた)
区別したいのでutf8_general_ciに変更してみます

Collationの変更方法

データベース

ALTER DATABASE COLLATE [照合順序];

テーブル

ALTER TABLE [テーブル名] COLLATE [照合順序];

カラム

ALTER TABLE [テーブル名] MODIFY COLUMN [カラム名] [] COLLATE [照合順序];

結果

SELECT * FROM test WHERE name = 'テスト';

id name
1 テスト

欲しかった挙動になりました(とりあえずめでたしめでたし)
Collationについて理解しきれてないところがあるのでちゃんと調査・理解できたら後ほど追記などします

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?