Dev/DataBase
[MariaDB] ERROR 1267 illegal mix of collations ...
nakanara
2023. 1. 16. 18:17
반응형
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
반응형