Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 한 줄의 쿼리로 테이블 데이터 정렬(Collation)을 변경하는 방법

MySQL에서 테이블의 데이터 정렬(collation)을 변경하려면 ALTER 명령어를 사용해야 합니다. 단 한 줄의 쿼리만으로 기존 테이블의 정렬 방식을 손쉽게 바꿀 수 있습니다.

데이터 정렬 변경 기본 문법

ALTER TABLE yourTableName COLLATE utf8_general_ci;

위 문법을 실제로 이해하기 위해 예제 테이블을 하나 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

예제 테이블 생성하기

mysql> create table CollateDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.98 sec)

테이블이 정상적으로 생성되었습니다. 이제 현재 테이블의 정렬 설정이 어떻게 되어 있는지 확인해 보겠습니다.

SHOW CREATE TABLE로 DDL 확인하기

테이블의 DDL(데이터 정의문)을 확인하려면 아래 문법을 사용합니다.

SHOW CREATE TABLE yourTableName;

생성한 CollateDemo 테이블의 DDL을 조회해 보겠습니다.

mysql> show create table CollateDemo;

실행 결과는 다음과 같습니다. 현재 테이블은 utf8mb4_0900_ai_ci 정렬 방식이 적용되어 있는 것을 확인할 수 있습니다.

+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CollateDemo | CREATE TABLE `collatedemo` (`Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(20) DEFAULT NULL, `Age` int(11) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

ALTER 명령어로 데이터 정렬 변경하기

이제 ALTER 명령어를 사용해 테이블의 데이터 정렬을 변경합니다. 실행 쿼리는 다음과 같습니다.

mysql> alter table CollateDemo collate utf8_general_ci;
Query OK, 0 rows affected (0.39 sec)
Records: 0 Duplicates: 0 Warnings: 0

쿼리가 성공적으로 실행되었습니다. 변경 사항이 실제로 적용되었는지 다시 한번 DDL을 조회해 확인해 보겠습니다.

mysql> show create table CollateDemo;

변경 후 출력 결과는 다음과 같습니다. 테이블의 기본 문자셋과 정렬이 변경된 것을 확인할 수 있습니다.

+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CollateDemo | CREATE TABLE `collatedemo` (`Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, `Age` int(11) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8 |
+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

정리 및 참고 사항

위 과정을 통해 ALTER TABLE 테이블명 COLLATE 원하는_정렬방식; 한 줄의 쿼리만으로 테이블의 데이터 정렬을 변경할 수 있음을 확인했습니다.

다만 몇 가지 주의할 점이 있습니다. 첫째, 이미 생성된 컬럼에는 자체적인 문자셋·정렬 설정이 남아 있을 수 있으므로, 컬럼 단위까지 완전히 변경하려면 CONVERT TO CHARACTER SET 구문을 함께 사용하는 것이 좋습니다. 둘째, 대소문자를 구분하는 비교가 필요하다면 utf8_bin처럼 bin 계열의 정렬 방식을 지정하면 됩니다. 셋째, 운영 중인 테이블이라면 정렬 변경 시 인덱스 재구성이 발생할 수 있으므로 트래픽이 적은 시간대에 작업하는 것이 안전합니다.