반응형
SQL Error 1267 illegal mix of collations (utf8mb4_general_ci, IMPLICIT) and (utf8mb4_unicode_ci, IMPLICIT) for operation '='
MariaDB에서 인의적 데이터를 만든 경우 DB의 정렬 기준과 테이블 컬럼의 정렬 기준이 다른 경우 발생합니다.
DB의 정렬 속성이 테이블의 정렬 속성과 다른지 확인이 필요합니다.
-- 오류 발생을 위해 CONVERT 사용 쿼리
WITH recursive downward AS (
-- 하향쿼리
SELECT CONVERT('ID-001', VARCHAR(100)) id, convert('', varchar(100)) pid
UNION ALL
SELECT convert(wfr_tgt_id, VARCHAR(100)) id, CONVERT(wfr_src_id, VARCHAR(100)) pid
FROM test_table ct, downward pt
WHERE pt.id = ct.wfr_src_id
AND ct.wfr_src_id != ct.wfr_tgt_id
)
SELECT * FROM downward
해결 방안1
DB 설정파일(my.cnf)을 변경하여 collation_connection 속성 변경
collation_connection 속성의 경우 별도 설정 항목이 없음 기본적으로 utf8mb4_general_ci 로 설정됨
SET collation_connection='utf8mb4_unicode_ci'
[mysqld]
init-connect = "SET NAMES utf8mb4; SET collation_connection='utf8mb4_unicode_ci'"
해결 방안 2
WITH recursive downward AS (
-- 하향쿼리
SELECT CONVERT('ID-001', VARCHAR(100)) collate UTF8MB4_UNICODE_CI id, convert('', varchar(100)) pid
UNION ALL
SELECT convert(wfr_tgt_id, VARCHAR(100)) id, CONVERT(wfr_src_id, VARCHAR(100)) pid
FROM test_table ct, downward pt
WHERE pt.id = ct.wfr_src_id
AND ct.wfr_src_id != ct.wfr_tgt_id
)
SELECT * FROM downward
참고
* https://mariadb.com/kb/en/server-system-variables/#collation_connection
반응형
'Dev > DataBase' 카테고리의 다른 글
TBR-7075: Specified role 'CONNECT' was not found (0) | 2023.05.12 |
---|---|
[MariaDB] 데이터 백업(mysqldump, mariabackup) (0) | 2023.02.14 |
[MariaDB] ERROR 1406 (22001): Data too long for column 'id' at row 1 (1) | 2023.01.13 |
ORACLE/MYSQL timestamp 구하기 (0) | 2022.08.18 |
ORA-14551: cannot perform a DML operation inside a query (0) | 2022.08.18 |