본문 바로가기

학습/DataBase

MySQL 5.0과 MySQL 8.x에서 CHARSET과 COLLATE 차이

테이블 이관 전 버전 확인이 되지 않았었다.

MySQL 5.0에서 MySQL 8.x로 테이블을 이관해서 확인하는데에는 문제가 없지만, MySQL 8.x에서 MySQL 5.0으로 테이블을 이관하면 글자가 깨지는 문제점을 확인했다.

 

MySQL 5.x 버전에서 테이블을 생성할 때 유의할 점은 MySQL 8 버전 이상에서 지원되는 `utf8mb4` 문자 집합과 `utf8mb4_unicode_ci` 콜레이션을 사용하지 않는 것입니다. MySQL 5.0에서는 `utf8` 문자 집합과 `utf8_general_ci` 콜레이션을 사용해야 합니다.

### 스키마 생성 스크립트

아래는 MySQL 5.0에 맞게 작성된 스키마 생성 스크립트입니다.

```sql
CREATE DATABASE base DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE base;

CREATE TABLE table1 (
    CONTET_ID bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'CONTET_ID',
    MNGR_ID varchar(20) COLLATE utf8_general_ci NOT NULL COMMENT '작성자 id',
    TITLE varchar(100) COLLATE utf8_general_ci NOT NULL COMMENT 'TITLE',
    INTRCN varchar(1000) COLLATE utf8_general_ci DEFAULT NULL COMMENT 'INTRODUCTION 소개',
    MAIN_EXPSR_ORDR varchar(2) COLLATE utf8_general_ci DEFAULT NULL COMMENT '노출여부 및 순서',
    DETAIL_TYPE varchar(20) COLLATE utf8_general_ci DEFAULT NULL COMMENT '상세 방식',
    DETAIL_LINK varchar(200) COLLATE utf8_general_ci DEFAULT NULL COMMENT '상세 링크',
    DETAIL_INPT longblob COMMENT '상세 입력 방식',
    REG_DT datetime NOT NULL COMMENT '등록일',
    CHG_DT datetime NOT NULL COMMENT '변경일',
    DEL_YN varchar(2) COLLATE utf8_general_ci DEFAULT NULL COMMENT '삭제여부',
    PRIMARY KEY (CONTET_ID),
    UNIQUE KEY CONTET_ID (CONTET_ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='TABLE1';
```

### 스크립트 실행 방법

1. MySQL 클라이언트에 접속합니다:
   ```sh
   mysql -u root -p
   ```

2. 스크립트를 실행하여 데이터베이스와 테이블을 생성합니다:
   ```sql
   SOURCE /path/to/your/script.sql;
   ```

3. 스키마가 올바르게 생성되었는지 확인합니다:
   ```sql
   SHOW TABLES IN base;
   ```

이 스크립트는 MySQL 5.0에서 호환되도록 작성되었으며, 서비스 환경에 맞게 조정되어 있습니다. MySQL 5.0에서는 `utf8mb4` 문자 집합과 `utf8mb4_unicode_ci` 콜레이션을 지원하지 않으므로, `utf8` 문자 집합과 `utf8_general_ci` 콜레이션을 사용해야 합니다.