Upgrade to Pro — share decks privately, control downloads, hide ads and more …

utf8mb4_0900_bin

 utf8mb4_0900_bin

とみたまさひろ

August 19, 2019
Tweet

More Decks by とみたまさひろ

Other Decks in Technology

Transcript

  1. utf8mb4_0900_bin
    utf8mb4_0900_bin
    とみたまさひろ
    2019-08-19
    MyNA会 2019年8月
    1

    View full-size slide

  2. 自己紹介
    自己紹介
    とみたまさひろ
    富士通クラウドテクノロジーズ
    日本MySQLユーザ会 文字化け担当
    @tmtms
    https://tmtm.github.io/mysql-params/
    2

    View full-size slide

  3. utf8mb4_0900_bin
    utf8mb4_0900_bin
    3

    View full-size slide

  4. utf8mb4_0900_bin
    utf8mb4_0900_bin
    Collation名
    MySQL 8.0.17 から登場
    4

    View full-size slide

  5. Collation
    Collation
    文字のソート順
    文字の一致/不一致
    デフォルトの utf8mb4_0900_ai_ci では
    a = A = A, 1 = ①
    は = ぱ = ば = ハ = パ = バ
    平成 = ㍻
    !=

    5

    View full-size slide

  6. https://suzuri.jp/tmtms/1934346/t-shirt/s/sumi
    6

    View full-size slide

  7. utf8mb4_bin との違い
    utf8mb4_bin との違い
    mysql> SHOW COLLATION LIKE 'utf8mb4%bin';
    +------------------+---------+-----+---------+----------+---------+---------------+
    | Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute
    +------------------+---------+-----+---------+----------+---------+---------------+
    | utf8mb4_0900_bin | utf8mb4 | 309 | | Yes | 1 | NO PAD
    | utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 | PAD SPACE
    +------------------+---------+-----+---------+----------+---------+---------------+
    7

    View full-size slide

  8. CollationのPAD属性
    CollationのPAD属性
    8.0 から追加
    PAD SPACE - 末尾空白文字の有無を無視する
    5.7までの振る舞い
    NO PAD - 末尾空白文字の有無を無視しない
    8.0からの新しいCollationだけ
    utf8mb4_*0900_*
    8

    View full-size slide

  9. PAD SPACE と NO PAD
    PAD SPACE と NO PAD
    mysql> set names utf8mb4 collate utf8mb4_unicode_520_ci;
    mysql> select 'a' = 'a ';
    +--------------+
    | 'a' = 'a ' |
    +--------------+
    | 1 |
    +--------------+
    mysql> set names utf8mb4 collate utf8mb4_0900_ai_ci;
    mysql> select 'a' = 'a ';
    +--------------+
    | 'a' = 'a ' |
    +--------------+
    | 0 |
    +--------------+
    9

    View full-size slide

  10. utf8mb4_0900_bin ができた経緯(妄想)
    utf8mb4_0900_bin ができた経緯(妄想)
    utf8mb4_bin にも NO PAD バージョンが欲しい
    互換のために utf8mb4_bin は変更できない
    utf8mb4_0900_bin 新設
    10

    View full-size slide

  11. utf8mb4_bin と utf8mb4_0900_bin
    utf8mb4_bin と utf8mb4_0900_bin
    mysql> set names utf8mb4 collate utf8mb4_bin;
    mysql> select 'a' = 'a ';
    +--------------+
    | 'a' = 'a ' |
    +--------------+
    | 1 |
    +--------------+
    mysql> set names utf8mb4 collate utf8mb4_0900_bin;
    mysql> select 'a' = 'a ';
    +--------------+
    | 'a' = 'a ' |
    +--------------+
    | 0 |
    +--------------+
    11

    View full-size slide

  12. 名前がイマイチな気がする

    名前がイマイチな気がする

    12

    View full-size slide

  13. Collation
    Collation
    デフォルト: utf8mb4_0900_ai_ci
    要素 意味
    utf8mb4 4バイトUTF-8
    0900 Unicode 9.0.0
    ai アクセントの違いを無視
    ci 大文字小文字の違いを無視
    13

    View full-size slide

  14. 0900 は Unicode 9.0.0 準拠のCollationという意味
    utf8mb4_0900_bin は Unicode 準拠じゃない
    NO PADなCollationは0900だけだからこうなった?
    それにしてもなー

    14

    View full-size slide

  15. 測ってないけどたぶん utf8mb4_bin よりも速いから
    みんな utf8mb4_0900_bin を使うといいと思う
    15

    View full-size slide