MySQLがバージョン5から8に飛んだ謎、意外と知らないCharset、Collationのこと


はじめに

今回はMySQL 8.0について以下の内容を紹介します。

  • なぜ、バージョン5から8に一気に上がったのか
  • Charsetとは何か
  • Collationとは何か

Youtubeでも解説しているので、ぜひ確認してみてください。
【YouTube動画】MySQL8.0

MySQLの名前の由来

MySQLは共同創設者のMichael Widenius (通称 Monty) さんの長女 Myにちなんで名付けられました。
ちなみに、MySQLをベースに、完全なGPLライセンスにしたMariaDBは、次女のMariaにちなんでいます。

[参考]
Why is the Software Called MariaDB?

MySQLがバージョンアップで5から8に上がった理由

MySQL 6.0はストレージエンジンにFalconを搭載したものを作っていたそうです。
しかし、Falconではなく、InnoDBを搭載したものの開発を進めたため、6.0は廃止になりました。

MySQL 7.0はMySQL Clusterと被るのを防ぎ、他のMySQL関連プロジェクトと数字を合わせるために、スキップしたという話です。
開発者のコメントとか特に見つからなかったので、ここら辺は眉唾程度に思ってください。

[参考]
What happened to MySQL 6 & 7?
MySQL 8.0.0 Development Milestone Release登場!!

MySQLの歴史に興味があれば、以下のQiita記事が詳しくてオススメです!
MySQLの歴史が面白い

Charsetについて

MySQLではDBに文字を保存するとき、Charset (文字コード) を指定します。
Charsetのデフォルトは、5.7まではlatin1、8.0からはutf8mb4になっています。
昨今の絵文字ブームの影響を受けてか、MySQL 8.0からは絵文字もDBに保存できます!

Charsetの確認方法

Charsetを確認するのに便利なコマンドを紹介します。

使用できるCharsetの一覧を表示する。

$ SHOW CHARSET;

データベースのデフォルトのCharsetを調べる。

$ SHOW CREATE DATABASE <db名>;

テーブルのデフォルトのCharsetを調べる。

$ SHOW CREATE TABLE <table名>;

[参考]
めちゃくちゃオススメします。浅すぎず深すぎず、MySQL 8.0について説明されています。
MySQL 徹底入門 第4版

Collationについて

DBに保存した文字をソートするときの規則としてCollationが使われます。
ただ、これだけでも説明が長くなるので、Collationの読み方だけ紹介します (Collationは別記事で紹介します!)。

Collationの例として以下があるとします。

utf8mb4_ja_0900_as_cs_ks

utf8mb4はCharset (文字コード) の種類を示します。

jaの部分は言語名を示します。中国語ならzh、ロシア語ならruです。

0900はUnicodeのバージョンを示します。

asの部分はアクセントを区別するかどうかを示します。
日本語の場合、濁音、半濁音の区別で、例えば「ぱぱ」と「はは」を区別するかどうかです。
また、アクセントの違いを区別しないときは、aiを付けます (accent insensitive)。

csの部分は大文字小文字を区別するかどうかを示します。
日本語の場合、「びよういん」と「びょういん」を区別するかどうかです。

ksの部分は平仮名、カタカナを区別するかどうかを示します。
言語名をjaにした場合のみ使用できます。

以上のことを踏まえると次のように解釈できます。
意外と読むのは簡単ですね。

utf8mb4_ja_0900_as_cs_ks
=> ルールを適用する文字は、文字コード utf8mb4、日本語かつUnicode バージョン9.00であり、濁音・半濁音・大文字・小文字・平仮名・カタカナを区別する。

まとめ

今回MySQLのメジャーナンバーの謎、Charset/Collationの意味について紹介しました。
別動画・別記事でもっと詳細にCollationを扱うので、ぜひ楽しみにしてください!

twitteryoutubeでのコメントもお待ちしています!