2010-02-02 18 views
0

我正在使用mysqlimport將.txt文件中的一些數據導入到MySQL數據庫表中。它似乎導入OK(沒有錯誤信息),但在顯示時看起來很奇怪,並且無法按預期搜索。將文本導入到MySQL:奇怪的格式

這是細節。原始文本文件以UTF-8格式保存,其記錄看起來像(在文本編輯器中)。第二個領域包括換行符:

WAR-16,52 ~~~~~ Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
~~~~~ ENDOFRECORD 
WAR-16,53~~~~~Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 

~~~~~ ENDOFRECORD 

我導入到其中的數據庫表是非常簡單的:

+-------+---------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+---------------+------+-----+---------+-------+ 
| id | varchar(100) | YES |  | NULL |  | 
| text | varchar(5000) | YES |  | NULL |  | 
+-------+---------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

當我導入的文件,這裏我使用命令:

$ mysqlimport -u root db textfile.txt --fields-terminated-by="~~~~~" --lines-terminated-by="ENDOFTHELINE" --default-character-set='utf8' 
db.records_list: Records: 18778 Deleted: 0 Skipped: 0 Warnings: 18787 

這裏是我所看到的,如果我再問問MySQL來顯示記錄:

mysql> select * from textfile; 
| 
W A R - 1 6 , 5 2 | L o r e m i p s u m d o l o r s i t . 
L o r e m i p s u m d o l o r s i t . 
(etc) 

因此,它看起來好像將空格或一些奇怪的編碼附加內容添加到文本中。

這裏是一個與數據庫查詢的問題:

mysql> select * from textfile where id like "%WAR%"; 

返回任何內容;也不加空格:

mysql> select * from textfile where id like "%W A R%"; 

只有此命令將返回任何

mysql> select * from textfile where id like "%W%"; 

任何人能猜到會是這樣嗎?我覺得它一定是編碼問題,但我無法解決。

------ UPDATE --------

好了,我檢查了數據庫和連接編碼。

mysql> show variables like "character_set_%"; 
+--------------------------+----------------------------------------+ 
| Variable_name   | Value         | 
+--------------------------+----------------------------------------+ 
| character_set_client  | latin1         | 
| character_set_connection | latin1         | 
| character_set_database | latin1         | 
| character_set_filesystem | binary         | 
| character_set_results | latin1         | 
| character_set_server  | latin1         | 
| character_set_system  | utf8         | 
| character_sets_dir  | /usr/local/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------------+ 
8 rows in set (0.01 sec) 

而且show table status說,表是latin1_swedish_ci

我已將「Western(Windows Latin 1)」(使用Snow Leopard上的TextEdit)中的文本文件重新保存,並嘗試使用與上面相同的命令導入它。不過,我仍然有相同的編碼問題。

我也試過,又沒有運氣:

  • 創建使用UTF-8的新表,並導入現有的文件
  • 複製粘貼&文成我以前導入另一個文本文件罰款,並試圖導入。

還是徹底的困惑:(((

回答

0

如您有重複的問題指出,確保您的表和連接正在使用UTF-8,將針對這個問題的常見原因之一。

http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

+0

謝謝。我已經檢查了這一點,並在上面更新了,但沒有運氣......有什麼明顯的我仍然失蹤? – AP257 2010-02-03 11:16:57

+0

如果字符編碼集是正確定義的,那麼唯一的其他建議是確保您所使用的終端也是UTF-8(如果您複製/粘貼語句)。否則,對不起,我沒有其他建議。 – macabail 2010-02-03 17:17:16