2021/04/08
意外と知らない?!MySQLのJSON
意外と知らないシリーズ第二弾です。
DBMSの中でも人気のMySQLですが、バージョン5.7.8からJSON型をサポートするようになった様です!
「JSONを入れるならTEXT型に入れれば良いのだから、大きな変化ではない」と思う方がいるかもしれません。
確かにその通りです。
ですが、それはJSONを入れる事だけに限った場合です。
JSON型をサポートされる様になった為、その他にもJSONに関わる関数も追加されています!
実際に見ていきましょう。
まずは、この様なテーブルを用意しました。
データとしては、こんな感じです。
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
これで準備が整いました。
これから行うのは、JSONの中身を見て一致するデータを取得するといったものです。
例)jsonカラムの中身を見て、キー名が「key2」で値が「value2」のものを取得する
今までのやり方だと、LIKEを使用しての部分一致を行うか、そもそもJSONではなくカラムに分けて保存、といったやり方しかなかったと思います。
それが関数にて、簡単に検索が出来ちゃいます。
今回使うのは、JSON_EXTRACTです。
先ほどの例を元に作成したSQLがこちらになります。
SELECT * FROM json_test WHERE JSON_EXTRACT(json, '$.key2') = 'value2'
JSON_EXTRACT関数は、第一引数にカラム名を指定し、第二引数でJSONのキー名を指定して値を取得する事が出来ます。
※「$」は頭を指しており、JSONの中身の検索には必須なので注意。
結果はご覧の通り、取得が行えました!
この様に、JSONを扱うのが非常に簡単に出来ました。
他にも検索方法として「カラム名->$.key = value」とすることも出来ます。
今回はここまでとしますが、JSONに関わる関数は他にも多数存在するので、興味のある方は是非調べて見て下さい。
なお、豆知識ですが「JSON型 = BIGTEXT型」といった感じで、TEXT型にJSONを入れて検索することも出来ます。
JSON型は INSERTする時に正常なJSONでないとエラーになりますが、TEXT型はその判定がないので注意が必要です。
参考リンク