2011-03-04 7 views
1

아마존의 EC2에서 MySQL 5.1 데이터베이스를 마이 그 레이션하고 우리가 이미지 저장에 사용하는 longblob 데이터 유형의 문제 테이블을 가지고 있습니다. 기본적으로 마이 그 레이션 후 longblob 열의 데이터는 문자 인코딩이 다르기 때문에 다른 크기입니다. 모든탭으로 구분 된 파일로 MySQL blob 덤프

먼저, 여기에 이전의 예이며, 마이그레이션 후 :

올드 :

x??]]??}?_ѕ??d??i|w?%?????q$??+? 

새로운 기능 :

x��]]����_ѕ��d��i|w�%�����q$��+� 

둘 다 컴퓨터에서 문자 집합 변수를 확인 그들은 동일합니다. 나는 또한 '쇼 만들기 테이블'을 확인했고 그것도 동일합니다. 클라이언트는 모두 동일한 방법으로 연결합니다 (SET NAMES가 없거나 문자 집합을 지정). 여기

제가 사용 mysqldump는 명령 (I뿐만 아니라 --hex-얼룩없이 시도)이다 : 여기

mysql DB_NAME --default-character-set=utf8 -e "LOAD DATA INFILE 'EXAMPLE.txt' INTO TABLE EXAMPLE;" 

같습니다

여기
mysqldump --hex-blob --default-character-set=utf8 --tab=. DB_NAME 

가 I 데이터를 로딩하는 방법이다 MySQL의 문자 집합 변수 (동일) :

올드 :

+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | latin1      | 
| character_set_connection | latin1      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | latin1      | 
| character_set_server  | latin1      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

새로운 기능 :

+--------------------------+----------------------------+  
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | latin1      | 
| character_set_connection | latin1      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | latin1      | 
| character_set_server  | latin1      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

나는 mysqldump를 실행 할 수 있도록 시도 할 다른 모르겠어요 및 BLOB 데이터가 두 시스템에서 동일해야합니다. 모든 팁은 크게 감사하겠습니다.

답변

2

이 문제는 mysql (http://bugs.mysql.com/bug.php?id=27724)의 버그 인 것 같습니다. 해결 방법은 mysqldump를 사용하지 않고 blob 데이터가있는 테이블에 대해 사용자 고유의 SELECT INTO OUTFILE 스크립트를 작성하는 것입니다. 다음은 그 예이다 :

SELECT 
COALESCE(column1, @nullval), 
COALESCE(column2, @nullval), 
COALESCE(HEX(column3), @nullval), 
COALESCE(column4, @nullval), 
COALESCE(column5, @nullval) 
FROM table 
INTO OUTFILE '/mnt/dump/table.txt' 
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; 

데이터를로드하려면 :

SET NAMES utf8; 
LOAD DATA INFILE '/mnt/dump/table.txt' 
INTO TABLE table 
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
(column1, column1, @column1, column1, column1) 
SET data = UNHEX(@column1) 

이 제대로 BLOB 데이터를로드합니다.

+0

고마워요. 내 문제에 대한 솔루션을 찾는 데 도움이되었습니다.이 문제는 PHP에서 바이너리 데이터 파일을 작성하여 LOAD DATA INFILE을 사용하여로드하는 데 도움이되었습니다. 나는 PHP에서 bin2hex와 hex2bin을 사용하고있다. – NickT

+0

도와 드리겠습니다. 마침내 알아 내는데 많은 시간이 걸렸으므로 시간을 절약 해주기를 바랍니다. – DrewVS

관련 문제