/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

照合順番とは?

f:id:yatta47:20210111225045p:plain

MySQLでデータベースを作るときに utf8mb4_general_ci っていうのを指定している例があって、なんだこれ?って思ったので調べてみた。

照合順番らしい

そう。照合順番らしい。

・・・・・・

全然わからん。で、もう少し調べると、DBのデータは文字コードとソート順番を持っていて、そのソート順のことをCollationと呼ばれるらしい。

文字コードごとに照合順番を定義しているらしい。

ふむ。なるほど。

 

具体的にどういうときに指定するのか?

主に

  • 大文字小文字を区別しない
  • 大文字小文字を区別する
  • バイナリ、大文字小文字を区別する

というのが指定できる。

あいまいな検索のほうが都合いい場合もあるし、厳密な比較のほうが都合がいい倍もあるし。そういう時に使い分けることになる。

 

指定しないとどうなるのか?

テーブルやDBとか作るときに COLLATE を指定しないで作ることもできる。

その場合どうなるのか?を調べてみたら公式ドキュメントにはこう書いてあった。

・CHARACTER SET X と COLLATE Y の両方が指定されている場合、文字セット X と照合順序 Y が使用されます。

・CHARACTER SET X は指定されているが COLLATE は指定されていない場合、文字セット X とそのデフォルト照合順序が使用されます。各文字セットのデフォルトの照合順序を確認するには、SHOW COLLATION ステートメントを使用します。

・COLLATE Y は指定されているが CHARACTER SET は指定されていない場合、Y に関連付けられた文字セットと照合順序 Y が使用されます。

・これ以外の場合は、データベース文字セットとデータベース照合順序が使用されます。

なるほど。DBとして文字コード毎にデフォルトのCOLLATEを持っていて、それが使われるってことですね。

納得。

 

参考

MySQLの文字列と照合順序について - Qiita

MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.3.3 テーブル文字セットおよび照合順序