我正在遷移亞馬遜的EC2中的MySQL 5.1數據庫,並且我有問題表與我們用於圖像存儲的longblob數據類型。基本上,在遷移之後,longblob列中的數據是不同的大小,這是由於字符編碼似乎不同。MySQL blob轉儲到製表符分隔文件
首先,這裏是前一個例子,在遷移後:
老:
x??]]??}?_ѕ??d??i|w?%?????q$??+?
新:
x��]]����_ѕ��d��i|w�%�����q$��+�
我查的字符集變量在兩臺機器上它們是相同的。我也檢查了'show create table',它們也是一樣的。客戶端都以相同的方式連接(沒有SET NAMES或指定字符集)。
這裏是我用mysqldump命令(I嘗試過不--hex-斑點以及):
mysqldump --hex-blob --default-character-set=utf8 --tab=. DB_NAME
這裏是我加載的數據:
mysql DB_NAME --default-character-set=utf8 -e "LOAD DATA INFILE 'EXAMPLE.txt' INTO TABLE EXAMPLE;"
這裏是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數據是在兩臺機器上是相同的。任何提示將非常感謝。
非常感謝,它幫助我找到了解決我的問題的方法,即在php中使用二進制數據編寫文件,然後使用LOAD DATA INFILE加載它。我在PHP中使用bin2hex和hex2bin,它正在工作! – NickT 2011-03-30 19:42:17
很高興幫助。這花了我很多時間才弄清楚,所以我希望它能爲你節省一些時間。 – DrewVS 2011-03-31 02:36:58