10.1.13 컬럼 문자 집합 변환
특정 문자 세트를 사용하도록 이진 문자열 또는 비 이진 문자열 열을 변환하려면 ALTER TABLE
을 사용합니다. 제대로 변환을 수행하려면 다음 조건 중 하나를 적용해야합니다.
열에 이진 데이터 형식 (
BINARY
,VARBINARY
,BLOB
)가있는 경우, 포함 된 모든 값은 단일 문자 집합 (열 변환 된 문자 집합)를 사용하여 인코딩해야합니다. 바이너리 컬럼을 사용하여 여러 문자 세트에서 정보를 저장하는 경우 MySQL은 어떤 값이 어떤 문자 집합을 사용할지 여부를 인식하지 못하고 데이터를 정확하게 변환 할 수 없습니다.(Column)에 이진 데이터 형식 (
CHAR
,VARCHAR
,TEXT
)가있는 경우 그 내용은 컬럼의 문자 세트 인코딩해야 다른 문자 집합을 사용할 수 없습니다. 내용이 다른 문자 집합으로 인코딩 된 경우 먼저 이진 데이터 형식을 사용하도록 열을 변환하고 사용하는 문자 집합 비 바이너리 컬럼으로 변환 할 수 있습니다.
VARBINARY(50)
로 정의 된 col1
라는 이름의 테이블 t
에 바이너리 컬럼이 있다고합니다. 컬럼의 정보를 단일 문자 집합을 사용하여 인코딩되어 있다고하면,이 컬럼을 해당 문자 세트를 포함한 비 바이너리 컬럼으로 변환 할 수 있습니다. 예를 들어, col1
에 greek
문자 세트를 나타내는 이진 데이터가 포함 된 경우 다음과 같이 변환 할 수 있습니다.
ALTER TABLE t MODIFY col1 VARCHAR (50) CHARACTER SET greek;
원래 컬럼에 BINARY(50)
의 형태가있는 경우이를 CHAR(50)
으로 변환 할 수 있지만 그 결과 얻어지는 값은 끝이 0x00
바이트로 패딩되어 이것이 바람직하지 않을 수 있습니다. 이러한 바이트를 제거하려면 TRIM()
함수를 사용합니다.
UPDATE t SET col1 = TRIM (TRAILING 0x00 FROM col1);
테이블 t
에 CHAR(50) CHARACTER SET latin1
로 정의 된 col1
라는 비 바이너리 열이 있지만 utf8
을 사용하도록이를 변환하고 많은 언어 값을 저장할 수 있도록합니다. 다음 문에서이를 실행할 수 있습니다.
ALTER TABLE t MODIFY col1 CHAR (50) CHARACTER SET utf8;
두 문자 세트에없는 문자가 열에 포함되어 있으면 변환 손실이 커질 수 있습니다.
MySQL 4.1 이전의 낡은 테이블이있는 경우, 실제로는 서버의 기본 문자 집합과 다른 문자 집합으로 인코딩 된 값이 아닌 바이너리 컬럼에 포함 된 특수한 상황이 발생할 수 있습니다. 예를 들어, MySQL의 기본 문자 집합이 latin1
에도 응용 프로그램은 sjis
값을 컬럼에 저장합니다. 적절한 문자 세트를 사용하기 위해 열을 변환 할 수 있지만 추가 단계가 필요합니다. 예를 들어, 서버의 디폴트 문자 집합이 latin1
에서 col1
은 CHAR(50)
로 정의되어 있음에도 불구하고 내용은 sjis
값이라고합니다. 첫 번째 단계에서는 이진 데이터 형식에 열을 변환하여 문자 변환을 수행하지 기존 문자 집합 정보를 제거합니다.
ALTER TABLE t MODIFY col1 BLOB;
다음 단계에서는 적절한 문자 세트를 사용하여 비 이진 데이터 형식에 열을 변환합니다.
ALTER TABLE t MODIFY col1 CHAR (50) CHARACTER SET sjis;
이 단계에서는 MySQL 4.1 이상으로 업그레이드 한 후 테이블이 INSERT
나 UPDATE
등의 문에서 변경되지 않아야합니다. 이 경우 MySQL은 latin1
을 사용하여 컬럼에 새 값을 저장하고, 그 컬럼은 sjis
값과 latin1
값을 동시에 포함하고 있으며, 정확하게 변환 할 수 없습니다.
먼저 열을 만들 때 속성을 지정하는 경우 ALTER TABLE
을 사용하여 테이블을 변경하는 경우에도 속성을 지정해야합니다. 예를 들어, NOT NULL
명시적인 DEFAULT
값을 지정했을 경우, ALTER TABLE
문에서 지정해야합니다. 지정하지 않으면, 결과의 컬럼 정의에 이러한 속성이 포함되지 않습니다.
테이블의 모든 문자 열을 변환하려면 ALTER TABLE ... CONVERT TO CHARACTER SET
문이 도움이 될 수 있습니다. 섹션 13.1.7 "ALTER TABLE 구문" 을 참조하십시오. charset