728x90
푸핫에 맛집을 업로드 하면서 설명에 이모티콘을 넣었는데 컬럼에 데이터를 저장할 수 없다는 Incorrect string value 에러가 나왔다.
원인은 간단했다. 테이블에 설정되어있던 charset은 UTF-8이었는데 Mysql과 Mariadb의 경우 UTF-8은 3바이트 가변 인자로 구현되어 최대 3바이트 지원이지만 이모지 문자열이 UTF-8로 인코딩 되는 경우 4바이트가 필요하기 때문이다.
이런 문제 해결을 위해 2010년 3월에 가변 4바이트 자료형인 uf8mb4가 나오게 되었다. 따라서 테이블과 컬럼의 charset을 utf8mb4로 collation은 utf8mb4-unicode-ci로 변경하면 된다.
테이블 수정 쿼리
alter table 테이블명 convert to character set utf8mb4 collate utf8mb4_unicode_ci
푸핫의 경우에 Node.js의 mysql2 패키지를 사용해 디비에 연결하고있는데, charset 설정을 추가했다.
charset:"utf8mb4",
Mysql이나 Mariadb 서버를 운영하고 있기 때문에 디폴트로 적용된 디비 설정도 수정하기로 했다.
/etc/my.cnf에 설정된 utf8을 utf8mb4로 바꿔주고 utf8-general-ci를 utf8mb4-unicode-ci로 수정
내 경우 my.cnf.d에 설정이 분할되어있다.
수정이 완료되면 꼭 재시작을 해주자.
*****추가
테이블의 collate뿐만 아니라 테이블 컬럼들의 collate 또한 같이 바꿔주어야 문제가 해결된다.
show full columns FROM 테이블명
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
꼭 수정해주자
728x90
'DB' 카테고리의 다른 글
Mysql 인덱스에 대해서 (0) | 2022.04.04 |
---|---|
Mysql 문자열 나누기 SUBSTRING, SUBSTRING_INDEX (0) | 2021.09.16 |
MySQL 이벤트 스케줄러 등록 (0) | 2021.08.25 |
MongoDB 설치 - Window (0) | 2020.11.29 |