programing

Mariadb 쿼리 utf8 이스케이프 문자열

copysource 2023. 8. 23. 23:36
반응형

Mariadb 쿼리 utf8 이스케이프 문자열

5.5.65-MariaDB MariaDB Server를 사용하고 있습니다.

json 문자열을 저장하는 "remoteData"라는 이름의 중간 텍스트 열이 있는 테이블이 있습니다.이 json 문자열의 문자열 값은 이스케이프 utf8 시퀀스로 저장됩니다(예:

"patientFirstName":"\u0395\u039b\u0395\u03a5\u0398\u0395\u03a1\u0399\u039f\u03a3"

위의 값은 그리스어 이름 "εευθριςοελ"."입니다.

쿼리를 사용하여 이 열을 검색하려고 합니다.

Select * from sync_details where remoteData like "%ΛΕΥΘΕΡ%"

하지만 난 빈 세트를 얻었어요.

저는 이것이 가치관이 빠져나갔기 때문이라고 생각하지만 어떻게 해야 할지 모르겠습니다.

편집: 쿼리는 php를 통해 실행되므로 php 함수가 포함된 솔루션을 사용할 수 있습니다.

잘 부탁드립니다.

크리스토포로스

사용하도록 정의된 데이터베이스 사용CHARACTER SET utf8그리고 autf8_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 및 autf8 인코딩 db 및 autf8_general_ci colation에서만 작동합니다.

언급URL : https://stackoverflow.com/questions/63751446/mariadb-query-utf8-escaped-string

반응형