MySQL 8

MySQL Innovation Day Tokyo

2018/05/23

とみたまさひろ

自己紹介

MySQL 8 🎉🎉🎉

MySQL 8

多くの新機能がありますが…

MySQL恒例「RCとはいったい…」案件

utf8の指定でwarning

mysql> set names utf8;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Warning (Code 3719): 'utf8' is currently an alias for the characte
r set UTF8MB3, which will be replaced by UTF8MB4 in a future relea
se. Please consider using UTF8MB4 in order to be unambiguous.

mysqlshのプロンプトが派手に

MySQL Parameters

https://tmtm.github.io/mysql-params

バージョン間のパラメータ値を比較

5.7 と 8.0 の比較

文字コードまわり

ujis,sjis,eucjpms,cp932 はもう要らない (個人の感想です)

Default Charset

5.7 latin1 ISO8859-1 (欧米の文字)
8.0 utf8mb4 Unicode (世界中の文字)

デフォルトのままで日本語や絵文字が使える

utf8mb4 Collations

文字の照合規則
日本語環境で使われそうなもの

  • utf8mb4_bin
  • utf8mb4_general_ci (5.7 デフォルト)
  • utf8mb4_unicode_ci
  • utf8mb4_unicode_520_ci
  • utf8mb4_0900_ai_ci (8.0 デフォルト)
  • utf8mb4_0900_as_ci
  • utf8mb4_0900_as_cs
  • utf8mb4_ja_0900_as_cs
  • utf8mb4_ja_0900_as_cs_ks

Collation name

bin コードのまま
general MySQL独自規則
unicode Unicode 4.0.0
unicode_0520 Unicode 5.2.0
0900 Unicode 9.0.0
ja_0900 Unicode 9.0.0 + 日本語

Collation name

ai Accent Insensitive
as Accent Sensitive
ci Case Insensitive
cs Case Sensitive
ks Kana Sensitive

デフォルトCollationの違い

  • 5.7: utf8mb4_general_ci
    • Aa, ,
    • 🍣🍺
  • 8.0: utf8mb4_0900_ai_ci
    • Aa, ,
    • 🍣🍺

Charset=utf8mb4 を指定しただけでは 5.7 と 8.0 で動きが異なるので注意

新しいCollationたち

utf8mb4_0900_ai_ci

  • アクセントの違いを区別しない
    • ははぱぱばば
  • 大文字小文字を区別しない
    • びょういんびよういん
    • いろはイロハ
    • 株式会社

utf8mb4_0900_as_ci

  • アクセントの違いを区別する
    • ははぱぱばば
  • 大文字小文字を区別しない
    • びょういんびよういん
    • いろはイロハ
    • 株式会社

utf8mb4_0900_as_cs

  • アクセントの違いを区別する
    • ははぱぱばば
  • 大文字小文字を区別する
    • びょういんびよういん
    • いろはイロハ
    • 株式会社

utf8mb4_bin と同じ?? (違います)

utf8mb4_ja_0900_as_cs

  • アクセントの違いを区別する
    • ははぱぱばば
  • 大文字小文字を区別する
    • びょういんびよういん
    • 株式会社
  • カタカナひらがなを区別しない
    • いろはイロハ

utf8mb4_ja_0900_as_cs_ks

  • アクセントの違いを区別する
    • ははぱぱばば
  • 大文字小文字を区別する
    • びょういんびよういん
    • 株式会社
  • カタカナひらがなを区別する
    • いろはイロハ

utf8mb4_0900_as_cs と同じ??

utf8mb4_0900 と utf8mb4_ja_0900 の違い

ソート順

mysql> select hex(s),s from ja order by s;
+--------+------+
| hex(s) | s    |
+--------+------+
| E4BA9C | 亜   |
| E4BC8A | 伊   |
| E99BA8 | 雨   |
| E6A084 | 栄   |
| E5A5A5 | 奥   |
+--------+------+

長音

mysql> select s from ja order by s;
+--------+
| s      |
+--------+
| あー   |
| ああ   |
| あい   |
| いあ   |
| いー   |
| いい   |
| うあ   |
| うい   |
| うー   |
+--------+

ja_0900 は JIS順

日本語辞書順

utf8mb4_0900_as_csが一番無難?

utf8mb4_binでもいいかも

まとめ

  • Charsetのデフォルトがutf8mb4で便利!
  • 日本語Collationが増えた!
  • 適切なCollationを使おう!