DB

[MySQL/MariaDB] Character set 오류 해결 방법

웹개발자(진) 2024. 6. 24. 21:47
반응형

 

 

 

잡담

로컬환경에서 SpringBoot를 MariaDB와 연결하여 잘 쓰고 있다가 실전에서도 사용가능한지 테스트하려고 호스팅을 진행하였는데요. AWS에서 RDS에 MariaDB를 활용해서 연결하여 쓰려는데 이상하게 값을 Post 해서 DB에 저장하려 하면 오류가 발생했습니다. 원인을 찾아보니 Character set 오류였는데요. 오늘은 해당 오류를 해결하는 방법을 알아보도록 하겠습니다.


 

문제발생

HTML에서 Input으로 한글을 입력받으니 DB에 저장될 때 다 깨져서 나왔습니다.

입력받은 한글예시 = \xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94

해당 값을 나중에 input 값이랑 비교하려고하니 오류가 발생해 DB에 값이 저장되지 않았습니다.

 


 

Character set 오류 해결방법

해결하는 방법은 간단합니다. 기본 문자셋을 UTF-8로 변경하면 됩니다. 하지만 최근 MySQL/MariaDB 버전에서는 UTF-8 대신 utf8mb4를 사용하는 것이 권장됩니다. utf8mb4는 UTF-8의 4바이트 버전으로, 모든 유니코드 문자를 지원합니다.

Query문에 아래 두 쿼리문 중 해당하는 것을 입력하시고 commit 하면 됩니다.

ALTER TABLE 테이블이름 DEFAULT CHARSET = utf8mb4;

이 명령어는 테이블의 기본 문자셋을 utf8mb4로 설정합니다. 이 설정은 새로 추가되는 열이나 데이터에만 적용되며, 기존의 데이터에는 영향을 미치지 않습니다.


 

ALTER TABLE 테이블이름 CONVERT TO CHARACTER SET utf8mb4;

이 명령어는 테이블의 모든 열의 문자셋을 utf8mb4 로 변환하며, 기존 데이터도 utf8mb4 문자셋으로 변환됩니다. 이는 데이터 변환 작업이 포함되므로, 데이터베이스의 크기에 따라 시간이 걸릴 수 있습니다.

 



Character set(문자 집합)?

컴퓨터가 텍스트 데이터를 저장하고 처리하는 데 사용하는 문자들의 모음입니다. 문자의 집합에는 숫자, 문자, 기호 등이 포함되며, 각 문자는 고유한 코드 값으로 매핑됩니다. 이를 통해 컴퓨터가 문자를 인식하고 처리할 수 있게 됩니다. 가장 널리 알려진 문자 집합은 ASCII와 Unicode입니다. UTF-8 은 한글을 포함하여 다양한 언어의 문자를 인코딩할 수 있는 문자 인코딩 방식입니다.


 

utf8mb4?

MariaDB와 MySQL에서 사용하는 문자셋 중 하나로, 표준 utf8 문자셋의 개선된 버전입니다. utf8은 유니코드 문자를 1~3바이트로 인코딩할 수 있지만, 일부 유니코드 문자(예: 이모티콘, 고대 문자 등)는 4바이트를 필요로 합니다. utf8mb4는 이러한 4바이트 유니코드 문자를 지원하기 위해 설계되었습니다.


 

왜 utf8mb4를 사용하는가?

  • 완전한 유니코드 지원: utf8mb4는 전체 유니코드 문자 세트를 지원합니다. utf8은 최대 3바이트만 지원하여 일부 유니코드 문자를 처리할 수 없습니다.
  • 이모티콘 지원: 이모티콘 및 기타 고유한 문자를 제대로 저장하고 표시할 수 있습니다.
  • 미래 호환성: 더 많은 유니코드 문자가 추가될 수 있는 상황에 대비하여 utf8mb4를 사용하는 것이 좋습니다.

 


 

글을 마치며

제가 사용한 MariaDB에선 기본적으로 utf8mb4를 적용하고 있다고 하는데 RDS 사용할 때는 왜 인코딩 디코딩이 안됬는지 모르겠습니다. 혹시 저처럼 character set오류가 발생하신다면 간단하게 Query문 작성을 하시면 되겠습니다.

반응형