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