반응형
Caused by: java.sql.SQLException:
Incorrect string value: '\xF0\x9F\x98\x81\xF0\x9F...' for column 'body' at row 1
그때 그때 문자따라 틀리겠지만 위에 오류가 날경우에 사용가능합니다.
이모지 이모티콘은 4바이트인데 mysql은 utf8이 3바이트로 설계되어 나는 오류라고한다.
mysql은 MYSQL 5.5.3 버전부터 utf8mb4 charset이 추가 되었다.
1. my.conf 파일 수정 -> 수정후 mysql 재시작
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_filesystem = binary
character_set_results = utf8mb4
character_set_server = utf8mb4
character_set_system = utf8
collation_connection = utf8mb4_unicode_ci
collation_database = utf8mb4_unicode_ci
collation_server = utf8mb4_unicode_ci
2. 글로벌 변수 확인
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
결과화면
3.각 테이블 설정 변경
/*mysql정보 스키마 DB선택*/
USE information_schema;
/*DB 케릭터셋 COLLATE 설정 변경 쿼리*/
ALTER DATABASE `데이터 베이스명` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
/*해당 데이터 베이스 테이블 변경 쿼리 생성쿼리*/
SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name,
"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") as _sql
FROM `TABLES`
WHERE table_schema like "데이터베이스 이름"
GROUP BY table_schema, table_name;
3번째 코드는 ALTER TABLE 코드 생성쿼리이다 결과 ALTER문중에서 이모티콘을 다룰 테이블만 복사해 적용하면 완료~
※주의할점 - mysql은 VARCHAR(255)바이트까지 index 생성이 가능한데
케릭터셋 변경을하면 VARCHAR(191)까지만 index생성이 가능합니다.
기존 인덱스가 VARCHAR(255)라면 VARCHAR(191)로 변경해주어야합니다.
반응형
'Mysql' 카테고리의 다른 글
DB 블락 구조와 이력관리의 위험성 (0) | 2020.03.03 |
---|---|
DB모델링 table의 작성 리커시브모델 데이터 타입 트리구조 DB (0) | 2020.03.03 |
mysql 정규식 REGEXP (0) | 2020.03.03 |