-
create table with COLLATEmysql 2023. 5. 4. 16:08
문제
테이블 생성시 query column 을 만들고, query column 으로 unique index 를 생성했다.
그런데 query 에 courreges, courrèges 를 입력시, 아래와 같이 에러가 발생했다.
rpc error: code = AlreadyExists desc = Duplicate entry '24-courrèges' for key ...
원인
https://stackoverflow.com/questions/6466901/mysql-distinction-between-e-and-%c3%a9-e-acute-unique-index 에 나온 것 처럼 e와 è가 mysql 에서 동일한 문자로 취급되었기 때문이다.
해결
기존 데이터의 COLLATE 변경
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
신규 테이블 생성시 COLLATE utf8mb4_bin 지정
create table my_table ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '일련 번호', query varchar(128) NOT NULL COMMENT '질의 문자열', sample enum ('Y', 'N') NOT NULL COMMENT '샘플 질의 여부', created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성시각', updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정시각', PRIMARY KEY (id), UNIQUE KEY id_query_index (id, query), KEY id_sample_index (id, sample), FULLTEXT INDEX query_index (query) WITH PARSER NGRAM ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='질의 정보';