メモです。
mysql でJsonを使ってみる
定義
こんな感じ
CREATE TABLE `test_table` (
`id` CHAR(50) NOT NULL,
`create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`data` JSON NOT NULL, <---- Json
);
データ追加
INSERT INTO test_table (id,data)
VALUES ('test','{"a":"hogehoge"}')
参照
基本
select * from test_table;
json が見たい
これが使える
json_extract( Jsonのカラム ,'$.Json_key')
select json_extract(data,'$.a') from test_table;
ちょっと、どうでもいい話
Heidisql なんかでのJsonの消し方
上記のソフトでレコードを消す際、Jsonが含まれていると、消せないことがあった。
送信されている、sql を見ると消したレコードデータでJsonの中身が''で送信されていた
こんな感じ
'{"a":"test"}'
一見間違ってないように見えるけど、冷静に考えるとJsonではなく文字列として送っている?
が原因で消せなかった。(そこまで、細かく検証してないです)
Jsonデータでkeyを数字にした時
数字をキーにして保存した時、Viewを自動的に作成されなかった。
Json形式を利用して色々なViewを作成されるようにしたが、数字を考えてなかった話
結論 sqlの構文エラー
Jsonで数字のキーを扱うときは、一手間いるらしい
json_extract(json_data,'$."1"')