はじめに
本記事は、MySQLを使っていて「そういえばバイナリデータってなんだっけ?」となったので、個人の備忘録として書いています。
そもそも バイナリ とは
コンピュータで取り扱うデータの記述形式の一つで、テキスト(文字)形式ではないもの。実行形式のプログラム、画像、音声、動画などがこの形式で記述されることが多い。1
ざっくりいうとコンピューターが理解できるテキスト以外のデータということですね。
BINARY および VARBINARY 型
BINARY および VARBINARY 型は、非バイナリ文字列ではなくバイナリ文字列を格納する点を除き、CHAR および VARCHAR と似ています。 つまり、文字列ではなくバイト文字列が格納されます。 2
CHARやVARCHAR型が「文字」を保存するのに対し、BINARYやVARBINARY型は「バイト列」、つまりただの数字の並びを保存する型ということですね。
主に以下の用途で使われます。
- ハッシュ値(SHA-256 など)
- UUID(バイナリ形式)
- 暗号化データ
BINARY型
特徴は、長さが固定であることです。
例えば BINARY(16) で定義された場合、長さは16バイトで固定されるため、足りない分は以下のように 0x00 (NULLバイト)で埋められます。
INSERT INTO t VALUES ('abc');
実際に保存される中身(イメージ):
61 62 63 00 00 00 ... (16バイト)
サイズが常に一定なので比較が高速で行えるというメリットがあります。
主に以下の用途で使われます。
- UUID(16バイト)
- 固定長ハッシュ値(MD5 = 16B、SHA-256 = 32B)
VARBINARY型
特徴は、長さが可変であることです。
先ほどと同様にVARBINARY(16) で定義した場合でも、0x00で埋めはされず、必要な分だけ保存されます。
INSERT INTO t VALUES ('abc');
実際に保存される中身(イメージ):
61 62 63
BINARY型に比べ比較はやや遅くなる(とはいえ通常は誤差)ものの、可変であることで無駄な容量を使わないというメリットがあります。
主に可変長のバイナリに使われます。
BINARY vs VARBINARY
ざっくりまとめると以下のようになります。
| 項目 | BINARY | VARBINARY |
|---|---|---|
| 長さ | 固定 | 可変 |
| パディング | 0x00で埋める | なし |
| 容量効率 | 悪い場合あり | 良い |
| 比較速度 | やや速い | やや遅い |
| 主な用途 | UUID・固定長 | 可変長バイナリ |
BLOB型とは?
同じバイナリデータを扱うものとしてBLOB型にも簡単に触れておきます。
一言でいうと 「サイズ制限の大きいバイナリデータ用の型」 です。
VARBINARY型が最大65,535B保存できるのに対し、BLOB型は最大4GBと非常に大きなバイナリデータを保存できます。
BLOB型の中でもいくつか種類があってそれによってもサイズは前後します。
| 型 | 最大サイズ |
|---|---|
| TINYBLOB | 255B |
| BLOB | 64KB |
| MEDIUMBLOB | 16MB |
| LONGBLOB | 4GB |
主に以下の用途で使われます。
- 画像
- 音声
- 暗号化されたデータ