CREATE TABLE `user` ( `username` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `role` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, UNIQUE INDEX `username_UNIQUE`(`username`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; INSERT INTO `user` VALUES ('u1', '[\"a\",\"b\"]'); INSERT INTO `user` VALUES ('u2', '[\"b\",\"c\"]'); INSERT INTO `user` VALUES ('u3', '[\"c\",\"d\"]');
所以表里数据是这样的。 username
role
u1
[“a”,”b”]
u2
[“b”,”c”]
u3
[“c”,”d”]
如果我需要查询拥有 角色a 或者 角色d 的用户,就可以这样查询:
1 2 3 4 5 6 7 8
mysql> select * from `user` where JSON_OVERLAPS(role,'["a","d"]')=1; +----------+-----------+ username role +----------+-----------+ u1 ["a","b"] u3 ["c","d"] +----------+-----------+ 2 rows in set (0.00 sec)