IT/SQL

[Mysql/MariaDB] Insert 에러 Incorrect string value: '\xF0\x9F\x91\xB7\xF0\x9F...' for column

월공 2021. 9. 29. 08:31
728x90
300x250
\xF0\x9F\x98\x81

\xF0\x9F\x98\x82

\xF0\x9F\x98\xA4

이게 뭔데 에러가 나는가 ?

흔히들 우리 휴대폰에서 자주 쓰는 "이모지 😁 😤" 가 유니코드화 된것. 4byte 로 구성되있음

UTF-8 문자 집합은 1~4 바이트까지 저장이 가능하게 설계가 되어있지만, MySql/MariaDB 에서의 UTF-8 은 3바이트 자료형으로 설계가 되었기 때문에, 최근에 나온 4바이트 문자열을 저장하려고 하면 에러가 발생하게됨

 

그래서 해결방법은 ?

Mysql 버전 5.5.3 이후에서부터 데이터베이스 chartset을 utf8 을 utf8mb4 로 변경해주면 문제를 해결할수 있음.
** Linux - mariadb 설정파일의 경우 대부분 /etc/my.cnf 에 위치, cnf 같은 파일 작업할땐 기존에꺼 cp 백업 필수.

 

/etc/my.cnf

[client]
default-character-set=utf8mb4

[mysqld]
character-set-server = utf8mb4

#utf8 들어간 잡다구리는 싸그리 mb4 를 붙여줬다
#안해줬다가 괜히 mysql 재시작하는데 PID 어쩌고 에러 떠서 삽질했다.
init_connect = SET collation_connection = utf8mb4_general_ci
init_connect = SET NAMES utf8mb4



[mysqldump]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4





...생략

 

짜투리 팁

이모지라고해서 모든 이모지가 안되는건 아니고, 3byte 짜리 이모지는 가능함

예를들어 , 

😁 의 경우는 \xF0\x9F\x98\x81 로 총 4byte 를 차지하지만,

\xE2\x98\xBA  ,  \xE2\x98\x94 같은 애들은 3byte 라서 정상적으로 인식한다.

 

아래는 mysql 에 정상적으로 insert 된 heidi sql 의 화면

 

 

다른 이모지 표가 보고싶다면 아래 링크 참고.

https://apps.timwhitlock.info/emoji/tables/unicode

728x90
300x250