miin29na

MariaDB/MySql 다국어 지원(utf8, utf8mb4) 본문

IT/database

MariaDB/MySql 다국어 지원(utf8, utf8mb4)

miin29na 2020. 3. 13. 16:47

MariaDB 에서 컬럼에 한국어 데이터를 저장 -> 다음과 같은 오류 발생

/* SQL 류 (1366): Incorrect string value: '\xEA\xB0\x80"}' for column `database`.`table`.`column` at row 1 */

 

한국어 뿐 아니라 아시아계 언어들에 대해 오류 발생

 

설정 확인

mysql> show variables like 'c%'; 

 

  • 다국어를 처리할 수 있는 UTF-8 저장방식이 있으므로  설정을 해줘야 한다. UTF-8 : 가변 4바이트
  • 전세계 모든 언어 문자는 3바이트가 안되므로 공간절약, 속도향상을 위해서는 utf8은 가변 3바이트로 설계 되었다.
  • Emoji 같은 새로나온 문자는 utf8 로 지원이 안된다.
  • mysql/mariadb 는 version 5.5 이후부터 가변 4바이트 자료형인 utf8mb4 를 추가

 

해결 1) Table 에만 utf8 적용

ALTER DATABASE [database 이름 ] DEFAULT CHARACTER SET utf8 COLLATE UTF8_GENERAL_CI;
ALTER TABLE [table 이름] CONVERT TO CHARACTER SET utf8 COLLATE UTF8_UNICODE_CI;

-> Table 에만 적용 경우, Join 의 경우 오류 발생. 안전하게 DB 자체에 utf8 적용을 권장!

 

해결 2) DB engine 자체 utf8 적용

Linux : vi /etc/my.cnf

Windows : my.ini

 

 

i) utf8 로 셋팅하는 경우

[mysqld] 

...

collation-server =utf8_general_ci 

character-set-server = utf8 

 

[client] 

...

default-character-set = utf8

ii) utf8mb4 로 셋팅하는 경우

[mysqld] 

...

collation-server =utf8mb4_unicode_ci 

character-set-server = utf8mb3 

 

[client] 

...

default-character-set = utf8mb4

 

 

https://jechue.tistory.com/74

 

[mysql/mariadb] utf8mb4 언어셋 및 표현범위

먼저 중요한 두 단어 Charset 과 Collation 의 뜻 charset 은 문자 집합, collation 은 정렬을 뜻한다. UTF-8 이란? 실생활의 대부분의 데이터는 텍스트기반(text-centric)이다. 당연히 실생활의 모든 텍스트 데이..

jechue.tistory.com

 

'IT > database' 카테고리의 다른 글

[Mysql] MySql 외부 접근 허용  (0) 2020.02.11
Comments