1
0

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 5 years have passed since last update.

MySQLの照合順序について

1
Last updated at Posted at 2020-01-11

はじめに

テーブルを作るときに照合順序の指定を間違えて、期待したことができず混乱したのでメモ。

経緯

mysqlテーブルを使って一種のバージョン管理を行うため、比較条件の厳しいutf8_binを使おうとしたら照合順序がテーブルに反映されなかった。

期待する結果

テーブルを作成する時、データベースに設定された照合順序に合わせて文字コードなどが指定されること。

SQL文を色々試してみた。

正しいSQL文

文字コードと照合順序を正しく指定したSQL文を処理させてみる。

正しいSQL文
create `database name`.`table name` (
  column_name data_type ( number )
  column_name data_type ( number )
) character set utf8 collate utf8-bin;

結果、文字コードと照合順序を正しく指定しているため、想定通りのテーブルとなる。

文字コードだけ指定したSQL文

文字コードは正しく指定するが、照合順序を指定していないSQL文を処理させてみる。

指定された文字コードをもとにinformation_schema.character_setに対応したis_default=yesの照合順序から取ってくる
create `database name`.`table name` (
  column_name data_type ( number )
  column_name data_type ( number )
) charset set utf8;

結果、作成されるテーブルの照合順序は思い通りになるとは限らない。

文字コードも照合順序も省いたSQL文

文字コードと照合順序を指定しないSQL文を処理させてみる。

データベースに設定されている文字コードと照合順序を持ってくる
create `database name`.`table name` (
  column_name data_type ( number )
  column_name data_type ( number )
);

結論

当たり前のことだけど、SQL文をテキトーに書くと思った挙動にならないので注意が必要。

参考

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?