Laravel中如何在JSON字段中搜索阿拉伯语字符串
解决MySQL JSON字段中阿拉伯语内容的搜索问题
方法1:用JSON_VALUE直接提取阿拉伯语值匹配
MySQL的JSON函数可以自动解析字段内的Unicode转义字符,直接提取ar键对应的内容后和输入的阿拉伯语字符串对比即可,无需手动处理转义:
-- 精确匹配 SELECT * FROM project WHERE JSON_VALUE(name, '$.ar') = 'المشروع الأول'; -- 模糊匹配 SELECT * FROM project WHERE JSON_VALUE(name, '$.ar') LIKE '%المشروع%';
方法2:用JSON_CONTAINS匹配完整JSON结构
如果需要匹配完整的键值对结构,直接构造包含阿拉伯语的JSON片段作为匹配条件:
SELECT * FROM project WHERE JSON_CONTAINS(name, '{"ar": "المشروع الأول"}');
关键配置检查
- 确保字符集支持:
确认project表的name字段字符集为utf8mb4(支持所有Unicode字符,包括阿拉伯语),可以通过以下SQL查看:
若字符集不对,执行修改语句:SHOW FULL COLUMNS FROM project LIKE 'name';ALTER TABLE project MODIFY name JSON CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 应用程序连接字符集:
确保你的程序连接MySQL时,指定字符集为utf8mb4(比如PHP的PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"),避免字符转义错误。
注意事项
- 不要手动对输入的阿拉伯语字符串做JSON编码后再搜索,否则会导致双重转义,反而匹配失败。
- 程序拼接SQL时务必使用参数绑定,既避免SQL注入,也能保证字符传递的准确性。
内容的提问来源于stack exchange,提问作者Maya Hamdan
相关产品推荐
相关产品推荐

