JSON 在 Mysql 和 Unicode Hex
JSON in Mysql and Unicode Hex
在我的 mysql 5.7 数据库 table 中有一个字段描述包含像
这样的值
"{\"1\":\"Glasvlies f\u00fcr Gipskartonfugen\",\"2\":\"5 cm x 25 m Rolle\"}"
我想从 symfony 3.4 项目中搜索 für Gipskartonfugen
。
我已经尝试过 SQL-query:
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%';
我得到了结果。
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 gives null
and "für"
. MySQL 8.0 gives für
和 für
.
尝试将 database or server 字符集更改为 utf8mb4
,看看是否有帮助。我不能在 dbfiddle 上执行此操作。
alter database <your database> character set utf8mb4 collation utf8_unicode_ci
或者,在插入之前取消转义 JSON。
或者,更新到 MySQL 8。这将提供许多功能和错误修复,包括更好的 Unicode 和 JSON 支持。
如果您将该列存储为 [`JSON`](https://dev.mysql.com/doc/refman/5.7/en/json.html) 它将理解unicode转义。
这也为您提供了适当的 JSON functions。
SELECT * FROM vendor_article where description->"$.*" like '%für Gipskartonfugen%';
这是 客户端 在 INSERTing
时的问题。如果您使用 PHP,请务必在调用 json_encode()
时包含 JSON_UNESCAPED_UNICODE
。如果您使用的是其他客户端,请说明。
在我的 mysql 5.7 数据库 table 中有一个字段描述包含像
这样的值"{\"1\":\"Glasvlies f\u00fcr Gipskartonfugen\",\"2\":\"5 cm x 25 m Rolle\"}"
我想从 symfony 3.4 项目中搜索 für Gipskartonfugen
。
我已经尝试过 SQL-query:
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%';
我得到了结果。
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 gives null
and "für"
. MySQL 8.0 gives für
和 für
.
尝试将 database or server 字符集更改为 utf8mb4
,看看是否有帮助。我不能在 dbfiddle 上执行此操作。
alter database <your database> character set utf8mb4 collation utf8_unicode_ci
或者,在插入之前取消转义 JSON。
或者,更新到 MySQL 8。这将提供许多功能和错误修复,包括更好的 Unicode 和 JSON 支持。
这也为您提供了适当的 JSON functions。
SELECT * FROM vendor_article where description->"$.*" like '%für Gipskartonfugen%';
这是 客户端 在 INSERTing
时的问题。如果您使用 PHP,请务必在调用 json_encode()
时包含 JSON_UNESCAPED_UNICODE
。如果您使用的是其他客户端,请说明。