관계형 데이터베이스인 MySQL을 사용하다가 다음과 같은 문제가 발생하였습니다. 바로 텍스트 저장시 일부 내용이 이 잘리는 이슈입니다.


! MySQL 저장할 때 일부 내용 잘리는 경우 해결하기
Admin을 사용해서 컨텐츠를 저장해야 되는데 내용의 일부가 계속 저장이 되지 않더군요. 이 경우 원인 파악이 필요한데 생각해본 원인은 다음의 경우들 입니다.

1. php 서버의 업로드 설정 사이즈가 작은 경우
2. php 설정의 post_max_size가 작아서 발생하는 문제

일단 위 두 가지 부분는 원인이 아니더군요 ~ 그렇다면 원인은 하나 ~ 바로 데이터베이스 테이블에 설정된 컬럼 타입으로 의심되었습니다.


# MySQL 테이블 컬럼 타입 변경하기
일단 테이블의 컬럼들이 어떤 타입으로 설정되었는지 확인해야 합니다. 그래서 아래와 같이 DESCRIBE 명령어를 사용해 확인해보았습니다.
DESCRIBE databaseName.tableName;
// 테이블의 타입과 Null 기본 값 등등 출력

확인해보니 콘텐츠를 저장하는 컬럼의 타입이 text입니다. 문제의 원인은 바로 여기에 있더군요 ~ 저장할 때의 텍스트 크기가 TEXT의 최대치인 64KB(65535 Byte)를 초과하기 때문입니다! 이제 원인을 알았으니 해결이 필요합니다. 일단 어떤 타입으로 변경할까 아래의 두 가지 중 하나를 선택하기로 하였습니다.

1. MEDIUMTEXT // Size = 16777215 Byte
2. LONGTEXT // Size = 4294967295 Byte


어떤 것을 사용해도 무방했습니다. 제 경우 편하게 LONGTEXT 타입으로 변경하였습니다. 기존의 TEXT 타입을 변경하기 위해서 아래와 같이 명령어 ALTER를 수행하여야 합니다.
ALTER TABLE tableName MODIFY columnName LONGTEXT;

// 수행결과
Query OK, 120 rows affected (0.01 sec)
Records: 120  Duplicated: 0  Warning: 0;

실행결과 확인해보니 타입 변경이 잘 이루어졌습니다. 이제 더 이상의 사이즈 문제는 없을 것이라 예상하고 다시 admin에서 저장해봅니다.

예상대로 기존의 잘리는 이슈는 잘 해결되었습니다.


! 마치면서
여기까지 MySQL에서 테이블의 타입 변경 방법을 알아보았습니다. DB 스키마의 경우 초반에 설계 후 사용하지만 가끔 예상하지 못한 이슈들이 발생할 수 있으며 이처럼 타입 변경이 필요한 경우도 생길 수 있습니다. 참고로 이와 같이 사이즈를 키우는 경우가 아닌 반대로 크기를 줄이는 경우 기존 테이블의 데이터가 유실될 수도 있으므로 DB 작업전 백업하는 습관이 반드시 필요하겠습니다.