我有一个表,其中的列类型为JSON类型。 我想在此字段上进行文本搜索,但似乎该搜索对重音敏感。
以下是一些基本的mysql查询:
SELECT '["étoile", "foo"]' LIKE '%etoil%'; -- return 1
SELECT '["étoile", "foo"]' LIKE '%étoil%'; -- return 1
结果与Json类型不同
SELECT CAST('["étoile", "foo"]' AS JSON) LIKE '%etoil%'; -- return 0
SELECT CAST('["étoile", "foo"]' AS JSON) LIKE '%étoil%'; -- return 1
我还尝试使用mysql json函数,
SELECT JSON_SEARCH( CAST('["étoile", "foo"]' AS JSON), 'all', '%etoil%'); -- return NULL
SELECT JSON_SEARCH( CAST('["étoile", "foo"]' AS JSON), 'all', '%étoil%');-- return "$[0]"
无法在JSON数据字段上指定字符集。
此时,解决方案是将列从JSON类型还原为基本文本列(仍包含JSON,但没有mysql验证)。
是否有可能使查询对JSON数据类型字段中的重音不敏感?
答案 0 :(得分:0)
尝试:
SELECT
COLLATION(`json_value`),
`json_value` LIKE '%etoil%',
`json_value` LIKE '%etoil%' COLLATE utf8mb4_0900_ai_ci,
JSON_SEARCH(`json_value`, 'all', '%etoil%'),
JSON_SEARCH(`json_value`, 'all', '%etoil%' COLLATE utf8mb4_0900_ai_ci)
FROM `tbltest`;
请参见db-fiddle。