반응형
mysql / Maria DB 대소문자 구분 검색
Mac에서 Maria DB v10을 실행하고 Centos에서 MySQL v5.6을 실행하고 있습니다.두 가지 모두 동일한 데이터베이스를 가지고 있으며 동작이 동일하기 때문에 OS나 서버 버전과 관련이 없습니다.
데이터베이스 1의 테이블은 다음과 같이 정의됩니다.
CREATE TABLE `issue_head` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`nme` longblob NOT NULL,
`row_ts` bigint(20) NOT NULL,
`created_user_id` bigint(20) NOT NULL,
`assigned_user_id` bigint(20) DEFAULT NULL,
`appID` bigint(20) NOT NULL,
`severity` varchar(50) NOT NULL,
`status` varchar(50) NOT NULL,
`is_test_ind` int(11) NOT NULL DEFAULT 0,
`price_est` decimal(15,2) DEFAULT NULL,
`required_ts` bigint(20) DEFAULT NULL,
`required_notif_ts` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id1` (`appID`,`status`,`row_ts`),
KEY `id2` (`appID`,`row_ts`),
KEY `id3` (`appID`,`assigned_user_id`,`row_ts`),
KEY `id4` (`required_ts`,`required_notif_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=1204 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci;
데이터베이스 2의 테이블은 다음과 같이 정의됩니다.
CREATE TABLE `aftn` (
`id` bigint(20) NOT NULL,
`druh_id` bigint(20) NOT NULL,
`out_ind` bigint(20) NOT NULL,
`row_dt` datetime NOT NULL,
`chng_dt` datetime NOT NULL,
`ack_dt` datetime DEFAULT NULL,
`mess_id` char(7) DEFAULT NULL,
`subj` varchar(500) DEFAULT NULL,
`msg` longtext DEFAULT NULL,
`status_id` bigint(20) NOT NULL,
`rel_obj_id` bigint(20) DEFAULT NULL,
KEY `aftn_id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci;
그래서 둘 다 같은 문자 집합과 같은 조합을 가지고 있습니다.유감스럽게도 데이터베이스 1에서 선택한 항목은 대소문자를 구분하지만 데이터 집합은 *_ci입니다.데이터베이스 2에서 선택한 항목은 대소문자를 구분하지 않습니다.다음 예제 사용
select * from issue_head where nme like 'test%' and appID = 23;
아무것도 반환하지 않지만 이렇게 쓸 경우:
select * from issue_head where nme like CONVERT('test%' USING utf8mb3) COLLATE utf8mb3_czech_ci and appID = 23;
대소문자에 관계없이 모든 행을 반환합니다.
선택한다.
select * from aftn where msg like 'gg%';
run on database 2는 대소문자에 관계없이 모든 행을 반환합니다.
데이터베이스 1에 어떤 문제가 있으며 어떻게 하면 대소문자를 구분할 수 있습니까?
문제를 재현할 수 있습니다.노트북에 설치한 MySQL 8.0.32로 테스트 중입니다.
mysql> insert into issue_head set nme='TESTING', appid=23, row_ts = 23, created_user_id=23, severity='bad', status='on';
Query OK, 1 row affected (0.00 sec)
mysql> select * from issue_head where nme like 'test%' and appID = 23;
Empty set (0.00 sec)
그리고 저는 다음과 같은 해결책을 찾았습니다.
mysql> select * from issue_head where nme like 'test%' collate utf8mb3_czech_ci and appID = 23;
+------+------------------+--------+-----------------+------------------+-------+----------+--------+-------------+-----------+-------------+-------------------+
| id | nme | row_ts | created_user_id | assigned_user_id | appID | severity | status | is_test_ind | price_est | required_ts | required_notif_ts |
+------+------------------+--------+-----------------+------------------+-------+----------+--------+-------------+-----------+-------------+-------------------+
| 1204 | 0x54455354494E47 | 23 | 23 | NULL | 23 | bad | on | 0 | NULL | NULL | NULL |
+------+------------------+--------+-----------------+------------------+-------+----------+--------+-------------+-----------+-------------+-------------------+
열을 정의했습니다.nme
~하듯이LONGBLOB
이 데이터는 문자 집합이나 조합이 없는 이진 데이터이므로 조합을 지정하지 않으면 대소문자를 구분하지 않는 조합을 사용할 수 없습니다.
언급URL : https://stackoverflow.com/questions/76015939/mysql-maria-db-case-insensitive-search
반응형
'programing' 카테고리의 다른 글
Swift용 Xcode에서 코드 포맷터를 사용하는 방법은 무엇입니까? (0) | 2023.09.04 |
---|---|
DBMS_OUTPUT에서 출력 버퍼를 가져오는 중입니다.C#의 GET_LINES (0) | 2023.09.04 |
루프가 있는 특정 테이블에서 N명의 사용자를 한 번에 선택하려면 어떻게 해야 합니까? (0) | 2023.09.04 |
iOS Safari – 오버스크롤을 비활성화하면서 스크롤 가능한 div를 정상적으로 스크롤할 수 있도록 하는 방법은 무엇입니까? (0) | 2023.09.04 |
중첩된 if 문장에서 mysql IF 문 오류 (0) | 2023.09.04 |