MySQLでBINARY操作! SQLでVARBINARY型を検索する方法
目次
こんにちは。池島です。
以前MySQLでVARBINARY型のデータを操作する機会があったのですが、少し癖がありました。そこで今回はVARBINARY型についてご紹介しながら、検索する方法についても紹介していきたいと思います。
検証環境
今回検証を行ったMySQLのバージョンは以下の通りです。
- MySQL
- 8.0.32
VARBINARY型とは
VARBINARY型とは、可変長のバイナリデータを格納することが可能なデータ型になります。指定できるデータ長は0バイトから65,535バイトまでとなっています。類似の型として固定長のバイナリデータを格納するBINARY型があります。
VARBINARY型の特徴
最大の特徴はやはりバイナリデータ自体を格納することになります。例えば、以下の通りテーブルを作成します。
CREATE TABLE varbinary_test (str_val VARCHAR(255), varbinary_val VARBINARY(255))
VARCHAR型とVARBINARY型のそれぞれにTESTという文字列を入れてみましょう。
INSERT INTO spstest.varbinary_test(str_val, varbinary_val) VALUES ('TEST', 'TEST')
INSERTした結果を取得してみます。
SELECT str_val , varbinary_val FROM varbinary_test ;
str_val | varbinary_val |
---|---|
TEST | 54455354 |
str_valからは入力したTESTが取れますが、varbinary_valからは数字が取れました。この値はデータベースの管理ソフトがバイナリデータを解釈し、16進数で出力したものになります。
この値をUTF-8でデコードするとTESTになります。入力した文字が文字として格納されるのではなく、バイナリデータとして格納されていることが分かります。
気を付けないといけないのが、varbinary_test に格納されている値はバイナリデータであるため、文字や数字とは合致しません。そのため、次の通りSQLを実行しても、意図したデータは取得されません。
SELECT str_val , varbinary_val FROM varbinary_test WHERE varbinary_val = '54455354' ;
VARBINARY型の検索方法
ではどのようにすればVARBINARY型を検索できるかというと、CAST関数を利用しVARBINARY型を検索したい文字列に変換して検索を行います。例えば下記のようなテーブルから検索するとします。
str_val | varbinary_val |
---|---|
TEST | 54455354 |
CODE | 434f4445 |
HOGE | 484f4745 |
次のように記載すれば指定した文字列で検索が可能です。
SELECT str_val , varbinary_val FROM varbinary_test WHERE CAST(varbinary_val AS CHAR) = 'TEST' ;
実行すると下記の通り取得されます。
str_val | varbinary_val |
---|---|
TEST | 54455354 |
まとめ
いかがでしたでしょうか。
頻繁には利用しないデータ型ですが、時々利用する機会があります。実際にVARBINARY型を操作する際に、このブログを思い出して参考にしていただけると幸いです。
ではまた!
《関連記事》