Type:JSONに、INSERTができない人へ
現状の問題
MySQL version 5.7.30
MySQLで、type:jsonの列を作ったのですが、なぜかinsertできませんでした。
解決策: json_encodeを使用する
まず、テーブルを作ります。(type:jsonの列あり)
create table sample_json(id int, json_data json);
次にこうすればinsertできるはずなのですが..できない。なんでや..
insert into sample_json values(1, '{"from" : "Japan", "name" : "Taro"}');
↓ 修正
insert into sample_json values(1, "{\"from\": \"Japan\", \"name\": \"Taro\"}");
解説
なぜ、こんな変な形にしたらいけるんでしょうか?
文字列をjson形式に変換しないといけないからです。(以下のような変換です。)
'{"from" : "Japan", "name" : "Taro"}' → "{\"from\": \"Japan\", \"name\": \"Taro\"}"
# 変数jsonを定義
$json = '{"from" : "Japan", "name" : "Taro"}';
# json_encode(?, JSON_UNESCAPED_UNICODE)で、日本語状態で、文字列をjson形式に変換。
# json_encodeだけだと、jsonの最初と最後に「"」がついてしまうので、mb_substr()を2つ使い、それらを削除。
$newjson =
mb_substr(
mb_substr(
json_encode($json, JSON_UNESCAPED_UNICODE)
, 1)
, 0, -1);
# 出力: {\"from\" : \"Japan\", \"name\" : \"Taro\"}
print($newjson);
参考
【MySQL】JSON型のカラムを操作する場合の落とし穴
MySQLでJSONデータを扱ってみよう!JSON型の使い方とは?
【JavaScript】javascriptでのデータオブジェクトのkeyに「:(コロン)」があるときのアクセス
Author And Source
この問題について(Type:JSONに、INSERTができない人へ), 我々は、より多くの情報をここで見つけました https://qiita.com/Yamkaz/items/e1d4eded36c3a57f8411著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .