Study/Java

VARCHAR(20)에는 한글로 몇 글자까지 입력가능할까?

dev_kong 2023. 3. 27. 00:22
728x90
728x90

레벨1의 하이라이트 체스미션을 진행하면서, DB에 게임룸마다 게임을 생성하고 저장하는 기능을 구현해야 했다.
각각의 게임룸에 이름을 정할수 있으면 좋을것 같아서 room에 대한 테이블을 아래와 같이 작성했다.

 

CREATE TABLE `room`  
(  
    `_id`         int PRIMARY KEY NOT NULL AUTO_INCREMENT,  
    `roomName`    varchar(10),  
    `currentTurn` varchar(5) default 'WHITE'  
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

table에서 CHARSET을 utf-8로 설정하였기에, 한글은 3글자까지 밖에 안들어가겠지 하고이것저것 테이블에 값을 집어넣어 봤다.

근데 예상과는 달리 한글이 4글자도 들어가고 5글자도 들어간다;;


뭐지 싶어서 공식문서를 확인해봤다.


VARCHAR뒤의 숫자는 Byte수가 아니가 그냥 글자수에 대한 내용이라고 한다.
이제껏 byte인줄 알았다..

 

의심병 말기 환자라 직접 확인을 해봤다.


varchar(10)으로 타입이 정해진 컬럼인 roomName에 한글로 10글자 까지 들어가는 것을 확인했고,
해당 값들의 바이트수도 확인을 해봤다. 6글자는 18바이트, 10글자는 30바이트로
VARCHAR 뒤에 달려있는 숫자랑은 무관하다는 것을 확인할 수 있었다.

mysql> select * from room;
+-----+--------------------------------+-------------+
| _id | gameName                       | currentTurn |
+-----+--------------------------------+-------------+
|   9 | 가가가가가가                       | WHITE       |
|  10 | 가가가가가가가가가가                 | WHITE       |
+-----+--------------------------------+-------------+
2 rows in set (0.00 sec)

mysql> SELECT LENGTH(gameName) FROM room;
+------------------+
| LENGTH(gameName) |
+------------------+
|               18 |
|               30 |
+------------------+
2 rows in set (0.00 sec)

mysql> desc room;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| _id         | int         | NO   | PRI | NULL    | auto_increment |
| gameName    | varchar(10) | YES  |     | NULL    |                |
| currentTurn | varchar(5)  | YES  |     | WHITE   |                |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

한가지 주의할 점은 모든 데이터베이스가 똑같은 방식을 사용하진 않는다.

(MariaDB 같은경우는 뭐.. 당연하게도 MySql과 같은 방식을 사용하지만,)


ORACLE의 VARCHAR2 같은 경우는 Byte로 계산을 한다고 하니, 사용하려는 데이터베이스마다
각각의 자료형이 어떠한 특징을 가지고 있는지 한번씩 살펴볼 필요가 있을 것 같다.

728x90
728x90