我正在尝试在MySql 8.0.33中添加一个JSON字段的索引
ALTER TABLE `json_test` ADD INDEX `test` ((
CAST(data->>"$.test" as CHAR(255)) COLLATE utf8mb4_bin
)) USING BTREE;
此处推荐https://planetscale.com/blog/indexing-json-in-mysql
这在不修改select查询的情况下有效:
EXPLAIN select * from `json_test` where data->>"$.test" = "foo";
-- shows possible_keys = test
问题是当字段大于255个字符时,插入失败
insert into `json_test` set data = '{"test":"a string greater than 255 characters ..."}';
-- Data truncated for functional index 'test' at row 1
我对选择查询没有太多的控制,所以理想情况下我不必修改它们。我正在使用Laravel查询构建器,所以我可以扩展MySqlGrammar.php。
我也不希望在mysql的设置中禁用数据截断警告。
如果值超过255个字符,我不在乎它是否被索引,因为大多数人都在搜索短字符串。
任何帮助将不胜感激。谢谢!
1条答案
按热度按时间bakd9h0s1#
试试看。我不认为需要CAST,但如果需要,就加进去。
第255章如果你愿意