照合順序とは
簡単に言えば、ソートや結合する際のルールをどうするか?ということらしい。
ルールとは、"大文字・小文字を区別するか?" や "半角・全角を区別するか?" など
ルールとは、"大文字・小文字を区別するか?" や "半角・全角を区別するか?" など
照合順序の一覧
照合順序の一覧は "SHOW COLLATION;" で確認できるが、
照合順序は文字セット単位に存在し結構な数があるので、文字セットで絞り込んだ方が良い。
例えば utf8mb4 の文字セットを使う場合は "SHOW COLLATION WHERE CHARSET='utf8mb4';" とすれば良い。
"general"、"bin"、"unicode" のいづれかを使うことになる。
・utf8mb4_general_ci
・utf8mb4_bin
・utf8mb4_unicode_ci
・utf8mb4_unicode_520_ci
・utf8mb4_general_nopad_ci
・utf8mb4_nopad_bin
・utf8mb4_unicode_nopad_ci
・utf8mb4_unicode_520_nopad_ci
"bin" - 英字大小文字を区別したい場合は "bin" を選択する。
"general" と "unicode" - 日本語の濁音・半濁音を区別する場合は"general"を使う。
"ci" - 大小文字を区別しない
"520" - 詳細不明
"nopad" - 詳細不明
照合順序は文字セット単位に存在し結構な数があるので、文字セットで絞り込んだ方が良い。
例えば utf8mb4 の文字セットを使う場合は "SHOW COLLATION WHERE CHARSET='utf8mb4';" とすれば良い。
MariaDB [(none)]> SHOW COLLATION WHERE CHARSET='utf8mb4';
+------------------------------+---------+------+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+------------------------------+---------+------+---------+----------+---------+
| utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 |
| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 |
| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 |
| utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 8 |
| utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 8 |
| utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 8 |
| utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 8 |
| utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 8 |
| utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 8 |
| utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 8 |
| utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 8 |
| utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 8 |
| utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 8 |
| utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 8 |
| utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 8 |
| utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 8 |
| utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 8 |
| utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 8 |
| utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 8 |
| utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 8 |
| utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 8 |
| utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 8 |
| utf8mb4_croatian_mysql561_ci | utf8mb4 | 245 | | Yes | 8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 8 |
| utf8mb4_croatian_ci | utf8mb4 | 608 | | Yes | 8 |
| utf8mb4_myanmar_ci | utf8mb4 | 609 | | Yes | 8 |
| utf8mb4_thai_520_w2 | utf8mb4 | 610 | | Yes | 4 |
| utf8mb4_general_nopad_ci | utf8mb4 | 1069 | | Yes | 1 |
| utf8mb4_nopad_bin | utf8mb4 | 1070 | | Yes | 1 |
| utf8mb4_unicode_nopad_ci | utf8mb4 | 1248 | | Yes | 8 |
| utf8mb4_unicode_520_nopad_ci | utf8mb4 | 1270 | | Yes | 8 |
+------------------------------+---------+------+---------+----------+---------+
33 rows in set (0.001 sec)
照合順序は、文字セット名に続き"言語名"が入るが、日本語の照合順序は存在しないので、"general"、"bin"、"unicode" のいづれかを使うことになる。
・utf8mb4_general_ci
・utf8mb4_bin
・utf8mb4_unicode_ci
・utf8mb4_unicode_520_ci
・utf8mb4_general_nopad_ci
・utf8mb4_nopad_bin
・utf8mb4_unicode_nopad_ci
・utf8mb4_unicode_520_nopad_ci
"bin" - 英字大小文字を区別したい場合は "bin" を選択する。
bin(バイナリ比較)は英字以外のすべての文字においても厳密に区別する。
あいまい検索を行いたい、といった特別な理由が無ければ、これで良いのでは?と思う。
あいまい検索を行いたい、といった特別な理由が無ければ、これで良いのでは?と思う。
"general" と "unicode" - 日本語の濁音・半濁音を区別する場合は"general"を使う。
また、ひらがなカタカナ、数字と丸数字 といった文字も "unicode" では同一とみなされる。
日本語あいまい検索を行う以外は "general" で良いと思う。
日本語あいまい検索を行う以外は "general" で良いと思う。
"ci" - 大小文字を区別しない
"bin"以外にはすべて "ci" が付いているので大小文字は区別しない.
大小文字を区別する場合は "cs" が付く。
大小文字を区別する場合は "cs" が付く。
"520" - 詳細不明
520とはUnicode照合アルゴリズム(Unicode collation algorithm = UCA)のバージョンを意味するようだ。
"520"では絵文字を区別するが、"520"を付けない場合は区別しない、と思われる。
"520"では絵文字を区別するが、"520"を付けない場合は区別しない、と思われる。
"nopad" - 詳細不明
末尾スペースを区別するか?を表すようだ。
MariaDB(MySQL)では、末尾スペースは区別しないのが既定らしい。
なのでそれらも区別したい場合は "nopad" を使う。
※ OracleではVARCHAR2の列だと末尾スペースは区別しなかったような??
CHAR列だと区別するので、まぁそれに近い考えなのかな?
MariaDB(MySQL)では、末尾スペースは区別しないのが既定らしい。
なのでそれらも区別したい場合は "nopad" を使う。
※ OracleではVARCHAR2の列だと末尾スペースは区別しなかったような??
CHAR列だと区別するので、まぁそれに近い考えなのかな?
MariaDB, MySQL
0 件のコメント:
コメントを投稿