MySQLにあるJSONへの完全一致検索
MySQL 5.7以降で次のようなテーブルJSONを入れています。
CREATE TABLE `p` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parameter` json NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO `p` (`id`, `parameter`) VALUES (1,'[{\"a\": \"hoge\", \"parameter\": {\"m\": 4, \"i\": 5}, {\"a\": \"fuga\", \"parameter\": {\"apple\": \"red\"}}]');
ここで新規データが来たときに、parameterと完全一致で検索をしたいのですが、どうすればいいでしょうか?JSON_CONTAINS
を使ってみたのですが、これは部分検索なので[{\"a\": \"fuga\", \"parameter\": {\"apple\": \"red\"}}]
というデータが来た場合にも1がヒットしていまいます。しかし1がヒットしてほしいのは[{\"a\": \"hoge\", \"parameter\": {\"m\": 4, \"i\": 5}, {\"a\": \"fuga\", \"parameter\": {\"apple\": \"red\"}}]
が来た場合のみです。
事前にJSON_EXTRACT + CAST
での文字列検索も試したのですが、JSON_EXTRACTで取り出される配列はkeyの順番が壊れてしまい、上手くいきませんでした。