如何解决Mariadb查询utf8转义字符串
我正在使用5.5.65-MariaDB MariaDB服务器。
我有一个表,该表的列为中文字型,名为“ remoteData”,在其中存储json字符串。 此json字符串中的字符串值存储为转义的utf8序列,例如
"patientFirstName":"\u0395\u039b\u0395\u03a5\u0398\u0395\u03a1\u0399\u039f\u03a3"
以上值为希腊文名称“ΕΛΕΥΘΕΡΙΟΣ”。
我正在尝试使用查询搜索此列
Select * from sync_details where remoteData like "%ΛΕΥΘΕΡ%"
但是我得到了一个空集。
我认为这是因为值被转义了,但我不知道该怎么办。
编辑:查询将通过php运行,因此我们可以使用包含php函数的解决方案。
谢谢。
Christoforos
解决方法
使用定义为使用CHARACTER SET utf8
和utf8_general_ci
归类的数据库,它应该像这样工作:
CREATE DATABASE IF NOT EXISTS `test` CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE `test`.`sync_details` (`remoteData` MEDIUMTEXT);
INSERT INTO `test`.`sync_details` (`remoteData`) VALUES ('{"patientFirstName":"\\u0395\\u039b\\u0395\\u03a5\\u0398\\u0395\\u03a1\\u0399\\u039f\\u03a3"}');
SELECT `remoteData` FROM `test`.`sync_details` WHERE `remoteData` LIKE '%ΛΕΥΘΕΡ%';
+----------------------------------------------+
| remoteData |
+----------------------------------------------+
| {"patientFirstName": "ΕΛΕΥΘΕΡΙΟΣ"} |
+----------------------------------------------+
1 row in set (0,00 sec)
您还可以尝试JSON_EXTRACT
从存储的JSON对象获取结构化数据。我就是这样测试的:
SELECT JSON_EXTRACT(`remoteData`,"$.patientFirstName")
FROM `test`.`sync_details`
WHERE JSON_EXTRACT(`remoteData`,"$.patientFirstName")
LIKE '%ΛΕΥΘΕΡ%';
+--------------------------------------------------+
| JSON_EXTRACT(`remoteData`,"$.patientFirstName") |
+--------------------------------------------------+
| "ΕΛΕΥΘΕΡΙΟΣ" |
+--------------------------------------------------+
1 row in set (0,00 sec)
要为JSON对象中的数据编制索引,您可以使用GENERATED ALWAYS
语法在表中添加“生成的列”
ALTER TABLE `test`.`sync_details` ADD COLUMN `firstName` VARCHAR(100) GENERATED ALWAYS AS (`remoteData` ->> '$.patientFirstName');
CREATE INDEX `firstnames_idx` ON `test`.`sync_details`(`firstName`);
SELECT `firstName` FROM `test`.`sync_details` WHERE `firstName` LIKE '%ΛΕΥΘΕΡ%';
+----------------------+
| firstName |
+----------------------+
| ΕΛΕΥΘΕΡΙΟΣ |
+----------------------+
1 row in set (0,00 sec)
这仅适用于MariaDB> = 10.2以及utf8编码的数据库和utf8_general_ci排序规则。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。