brunch

You can make anything
by writing

C.S.Lewis

by 서환수 Jan 23. 2024

MySQL varchar 길이 기준

Oracle용으로 만들어진 테이블 스키마를 받아서 MySQL용 테이블 스키마를 만들어야 한다고 해 봅시다. 이 때 VARCHAR2는 MySQL에서 varchar로 변환해야 하는데, VARCHAR2(100 BYTE) 이렇게 적어놓았으면 MySQL varchar에서는 길이를 어떻게 지정해야 할까요?


MySQL의 varchar에서는 길이를 문자 개수로 지정합니다. 따라서 어떤 문자 집합을 사용하는지에 따라 바이트 수가 달라질 수 있습니다. 예를 들어 latin1에서는 한 글자가 한 바이트이고 utf8에서는 한 글자가 최대 4바이트를 차지합니다. MySQL에서 utf8을 쓰면 3바이트를, 이모지 등이 전부 들어있는 utf8mb4를 쓰면 4바이트를 차지합니다.


따라서 오라클 데이터베이스에서 100 BYTE를 전부 latin1으로 채우면 100 글자가 들어갈 것이고, 이 데이터를 utf8mb4 문자 집합을 사용하는 MySQL에 집어넣는다면 한 글자당 4 바이트씩 총 400 바이트가 필요합니다.


결국 깔끔하게 답을 하기 어려운 문제가 되고 마는데, MySQL 요즘 버전에서 주로 사용하는 utf8mb4를 기준으로 할 때, 영어처럼 라틴 문자만 사용하는 경우가 MySQL로 옮길 때 글자 수를 가장 크게 잡아야 할 텐데, 이 경우에는 Oracle의 VARCHAR2(100 BYTE)를 MySQL varchar(100)으로 바꿔야 하겠네요.


아, 그리고 가능하다면 기존 시스템에 들어있는 정보를 쭉 다 검토해 보고 Oracle DB스키마도 바이트 말고 글자 수 단위로 바꾸는 게 좋을 겁니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari