在我的mysql 5.7数据库表中,有一个包含等值的字段描述
"{"1":"Glasvlies f\u00fcr Gipskartonfugen","2":"5 cm x 25 m Rolle"}"
我想从symfony 3.4项目中搜索für Gipskartonfugen
。
我已经尝试过SQL查询:
SELECT * FROM vendor_article v0_ WHERE v0_.description LIKE ?;
WHERE描述是%für Gipskarton%
或%f\\u00cfr Gipskarton%
或%f\u00cfr Gipskarton%
,但没有得到任何结果。
与相同的结果SELECT * FROM vendor_article v0_ WHERE CONCAT(v0_.description) LIKE ?;
但是当我搜索SELECT * FROM vendor_article WHERE description LIKE '%\u00%';
我得到了结果。
这是INSERTing
时的客户端问题。如果您使用的是PHP,请确保在调用json_encode()
时包含JSON_UNESCAPED_UNICODE
。如果您正在使用其他客户端,请这样说。
MySQL 5.7似乎在JSON中存在转义Unicode的实际问题。我最初以为这是因为默认的字符集是latin1,但事实并非如此。
create table vender_article (
description json not null
) character set utf8mb4;
insert into vender_article values ('"f\u00fcr"'), ('"für"');
select * from vender_article;
MySQL 5.7给出了null
和"für"
。MySQL 8.0给出了CCD_ 14和CCD_。
尝试将数据库或服务器字符集更改为utf8mb4
,看看这是否有帮助。我不能用小提琴演奏。
alter database <your database> character set utf8mb4 collation utf8_unicode_ci
或者,在插入JSON之前取消捕获JSON。
或者,更新到MySQL 8。这将提供许多功能和错误修复,包括更好的Unicode和JSON支持。
如果将列存储为[`JSON`](https://dev.mysql.com/doc/refman/5.7/en/json.html)它将理解unicode转义。这也为您提供了适当的JSON函数。
SELECT * FROM vendor_article where description->"$.*" like '%für Gipskartonfugen%';