Mysql

Mysql 이모티콘 오류 Caused by: java.sql.SQLException: Incorrect string value

정보 집합 2019. 3. 28. 16:54
반응형
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)로 변경해주어야합니다. 

 

  

 

 

 

반응형