JSON in Mysql and Unicode Hex



在我的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%';

最新更新