2017-02-24 1 views
2

4 테이블 (tab1, tab2, tab3, tab4)이있는 MySQL 데이터베이스 (myDB, ~ 2GB 크기)가 있습니다. 현재 테이블에 저장된 데이터는 문자셋 ISO-8859-1 (즉, Latin-1)을 사용하여 추가되었습니다.Latin-1에서 UTF-8로 MySQL 데이터베이스를 마이그레이션하는 방법은 무엇입니까?

모든 테이블의 데이터를 UTF-8으로 변환하고 UTF-8을 테이블/데이터베이스/열의 기본 문자 집합으로 사용하십시오. https://blogs.harvard.edu/djcp/2010/01/convert-mysql-database-from-latin1-to-utf8-the-right-way/

나는 흥미로운 접근 방식을 발견 : 나는 아직 그것을 시도하지 않은

mysqldump myDB | sed -i 's/CHARSET=latin1/CHARSET=utf8/g' | iconv -f latin1 -t utf8 | mysql myDB2 

을하지만, 어떤주의 사항이 있습니까?

MySQL 셸에서 직접 할 수있는 방법이 있습니까?

[EDIT :] SHOW CREATE TABLE messages;

결과 ALTER TABLE messages CONVERT TO CHARACTER SET utf8mb4;

CREATE TABLE `messages` (
    `number` int(11) NOT NULL AUTO_INCREMENT, 
    `status` enum('0','1','2') NOT NULL DEFAULT '1', 
    `user` varchar(30) NOT NULL DEFAULT '', 
    `comment` varchar(250) NOT NULL DEFAULT '', 
    `text` mediumtext NOT NULL, 
    `date` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`number`), 
    KEY `index_user_status_date` (`user`,`status`,`date`) 
) ENGINE=InnoDB AUTO_INCREMENT=3285217 DEFAULT CHARSET=utf8mb4 

답변

2

실행 후에는 테이블을 전환하는 것이 가능하다. 그렇다면 애플리케이션을 변환해야합니다.

ALTER TABLE tab1 CONVERT TO utf8mb4; 
etc. 

확인하려면 SHOW CREATE TABLE tab1을 수행하십시오. 그것은 당신에게 CHARACTER SET utf8mb4를 보여 주어야합니다.

참고 :

  • 어떤 VARCHARTEXT 컬럼에 데이터의 인코딩을 변환 : 무슨 3 가지가있다.
  • 해당 열의 CHARACTER SET을 변경하십시오.
  • 표의 문자를 DEFAULT CHARACTER SET으로 변경하십시오. 문자 집합을 지정하지 않고 새 열을 추가하면이 기능이 작동합니다.

응용 프로그램은 ...

당신은 MySQL의에 대한 클라이언트에서 연결

, 당신은 응용 프로그램 고유의 방법으로 또는 SET NAMES를 통해, 그에게 클라이언트의 바이트 인코딩을해야합니다. 이것은 이 아니고은 열 선언과 동일해야합니다. 필요한 경우 INSERTSELECT 동안 변환이 발생합니다.

테이블 중 하나의 복사본을 백업하거나 테스트 해 보는 것이 좋습니다.

+0

'ALTER TABLE tab1 CONVERT TO CHARACTER SET utf8mb4;를 실행했습니다. 'VARCHAR 및 TEXT 열의 데이터 인코딩을 변환하십시오. 그 단계 동안 일어난다. 이것은 또한 https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-character-set에서 찾은 것입니다. 하지만 실제로 ** 테이블에 저장된 데이터는 변환되지 않았습니다 ** - 여전히'Latin-1'입니다 - 기본값과 일부 컬럼의 데이터 타입이 변경되었습니다 (diff' dump_before_convert.sql dump_after_cobert.sql'을 on 덤프). 어떻게'latin-1'에 현재 저장된 데이터를'utf-8mb4'로 변환 할 수 있습니까? –

+0

현재'SHOW CREATE TABLE' (적어도 그 컬럼에 대해)과'HEX (col) SELECT ... '를 보여주십시오. 이 두 가지 모두 없이는 실제로 열에 실제로 무엇이 있는지, 그리고 그 것이 정상인지 아닌지를 말하기는 어렵습니다. –

관련 문제