DB/MariaDB(SQL)

[DB] Character Set(문자 집합)

Yoonsoo Park 2024. 10. 14. 20:07

*Rocky Linux 9.4와 MariaDB 기반으로 정리한 포스팅입니다. 

1. 문자 집합? 인코딩? 디코딩?

 문서를 열어보다 보면 간혹 외계어처럼 한글이 깨져서 보일 때가 있다. 이럴 때 흔히 나오는 단어들이 캐릭터 셋(character set), 인코딩(incoding)이런 단어일 것이다. 캐릭터 셋과 인코딩이란 무엇일까? 먼저 문자 집합(character set)정보를 표현하기 위한 글자나 기호의 집합을 정의한 것이다. 문자나 기호를 컴퓨터에서 저장하거나, 통신에 사용하기 위해서는 문자나 기호를 바이너리 형식(이진수)로 변환해야 하는데, 이러한 과정을 인코딩(incoding, 부호화)라고 하며, 인코딩된 문자 부호를 다시 디코딩(decoding)해서 원래의 문자나 기호로 표현할 수 있다. 

 

 이제 문자 집합, 인코딩, 디코딩에 대해 어느 정도 알았다면, 대표적인 문자 집합에 대해 알아보자.

 

주요 문자 집합

Latin1

  • 영어만 지원, ASCII Code
  • ASCII Code: 알파벳, 숫자, 기호 등 128자를 7비트의 이진수로 부호화한 국제 표준 부호

EUC-KR

  • 한글만을 지원하는 방식(영어/숫자/기호는 기본 포함)
  • 한글만 지원하는 사이트에서 많이 사용됨
  • 한글 1글자를 저장하는데 2byte 사용됨

UTF-8

  • 유니코드(Unicode)를 위한 방식
  • 한글을 포함하여 다국적 언어를 지원(가변의 길이로 인코딩)
  • 한글 1글자를 저장하는데 3byte가 사용됨

 

 

2. MySQL(MariaDB)에서의 문자 집합(Character Set)

 데이터베이스에서 문자 집합은 데이터베이스 내에 어떤 문자가 들어가냐에 따라 적절한 문자 집합을 선택해야 깨지지 않고, 정확하게 저장, 검색, 처리할 수 있기에 중요하다. 이제 문자 집합과 관련된 쿼리문들을 확인해보자. 

 

현재 데이터베이스들의 기본 문자 집합을 확인

SELECT schema_name , default_character_set_name FROM information_schema.schemata ;

<데이터베이스의 문자 집합 확인>

 

특정 데이터베이스를 생성 시 적용된 문자 집합 확인 

SHOW CREATE DATABASE database;  
// 생성 시 적용된 DDL 구문을 확인하는 쿼리문이지만, 기본 문자 집합도 볼 수 있다.

<데이터베이스 생성 DDL 구문 확인>

 

MySQL(MariaDB)에서 지원하는 문자 집합 확인

<MariaDB에서 지원하는 문자 집합>

 

문자 집합은 데이터베이스 생성 시, 테이블 생성 시 기본 문자 집합(default character set)을 지정해줄 수 있고, 이미 존재하는 데이터베이스/테이블의 문자 집합을 변경해줄 수도 있다. 

 

데이터베이스 생성 시 지정하는 방법

CREATE DATABASE database DEFAULT CHARACTER SET charset; 

ex)
create database marketDB default character set utf8 ; 
// 데이터베이스 생성 시 기본 문자 집합을 설정해주면, 하위 테이블들은 해당 문자 집합으로 설정된다.
show databases; 
show create database marketDB; 

use marketDB; 

create table memberTB( 
  id char(10) primary key,   
  pass char(15) not null,  
  name char(15) not null,  
  point int default 100000,  
  regdate datetime  

); 

show create table memberTB; 
insert into memberTB values ('john','1111','존 스미쓰', 1000, '2016-1-29 19:28:10'); 
insert into memberTB values ('trump','1111','도날드 덕', 2000, '2017-2-28 19:28:10'); 
select * from memberTB;

 

테이블 생성 시 지정하는 방법

CREATE TABLE 테이블명 ( 
컬럼 설정 
) DEFAULT CHARSET=문자 집합 이름 ;

ex)
create table memberTB2( 
id char(10) primary key, 
pass char(15) not null, 
name char(15) not null, 
point int default 1000, 
intro varchar(255), 
regdate datetime 
) DEFAULT CHARSET=euckr

show create table memberTB2; // 문자 집합 확인

 

데이터베이스/테이블의 문자 집합을 변경해주는 방법

ALTER DATABASE database_name
CHARACTER SET new_charset
COLLATE new_collation; //콜레이션(정렬 규칙)은 명시하지 않으면 문자셋의 기본 콜레이션으로 설정된다

 

 

 

 힘들지만 오늘도 해낸 나를 위한 한 마디, 

"진정으로 원하는 것을 향해 열심히 일할 때, 그것은 더 이상 일이 아니다", Henry Ford

 

"조금 더 즐겨보자."