2017-03-07 45 views
0

我試圖將文本文件導入到mysql數據庫中。首先,我創建的模式:mysql導入語句切斷整數

Create table tbl_windspeed(
    year int, 
    month varchar(50), 
    speed decimal, 
    location varchar(50)); 

這裏的txt文件的部分內容:同一行作爲上述

2015 feb  15.7 Neumayer 
2015 sep  \N  Neumayer 
2015 nov  \N  Neumayer 
2015 jun  17.3 Neumayer 
1976 jul  \N  Rothera 
1976 may  \N  Rothera 
1976 oct  \N  Rothera 
1976 apr  \N  Rothera 
1976 mar  \N  Rothera 
1976 aug  \N  Rothera 
1976 jan  \N  Rothera 

這裏的import語句和:

LOAD DATA INFILE 'csv_windspeed.txt' INTO TABLE tbl_windspeed; 

|015 | feb | 16 | Neumayer 
|015 | sep | NULL | Neumayer 
|015 | nov | NULL | Neumayer 
|015 | jun | 17 | Neumayer 
|76 | jul | NULL | Rothera 
|76 | may | NULL | Rothera 
|76 | oct | NULL | Rothera 
|76 | apr | NULL | Rothera 
|76 | mar | NULL | Rothera 
|76 | aug | NULL | Rothera 
|76 | jan | NULL | Rothera 

因此,有兩件事情:

1)年整數正在切斷

2)即使它在表格模式中被指定,它們的風速數據也不會被讀取爲小數。

有一件事有趣不過,當我運行查詢:

SELECT * FROM tbl_windspeed WHERE year = 1962 

我得到這樣的結果:

|62 | nov |  8 | Faraday 
    |62 | jun | 11 | Faraday 
|1962 | jul | 11 | Grytviken 
|1962 | may |  7 | Grytviken 
|1962 | oct |  6 | Grytviken 
|1962 | apr |  7 | Grytviken 
|1962 | mar | 12 | Grytviken 
|1962 | aug |  7 | Grytviken 
|1962 | jan |  9 | Grytviken 
|1962 | dec |  8 | Grytviken 
|1962 | feb |  9 | Grytviken 
|1962 | sep |  9 | Grytviken 
|1962 | nov | 12 | Grytviken 
|1962 | jun |  9 | Grytviken 
    |2 | jul | 13 | Halley 
    |2 | may |  9 | Halley 
    |2 | oct | 11 | Halley 
    |2 | apr | 13 | Halley 
    |2 | mar | 11 | Halley 
    |2 | aug | 10 | Halley 
    |2 | jan |  8 | Halley 
    |2 | dec |  9 | Halley 
    |2 | feb | 11 | Halley 
    |2 | sep | 14 | Halley 
    |2 | nov |  9 | Halley 
    |2 | jun | 11 | Halley 
    | | jul | 14 | Signy 
    | | may | 11 | Signy 
    | | oct | 19 | Signy 
    | | apr | 15 | Signy 
    | | mar | 11 | Signy 
    | | aug | 12 | Signy 
    | | jan | 11 | Signy 
    | | dec | 11 | Signy 
    | | feb | 16 | Signy 
    | | sep | 18 | Signy 
    | | nov | 13 | Signy 
    | | jun | 16 | Signy 

因此,即使MySQL的實現這些行是從1962年,他們是仍然被切斷。同樣,小數點正在被切斷。我不太確定這裏發生了什麼,任何幫助將不勝感激,謝謝。

更新:當我在mysql中運行查詢(獲得前10名最高windspeeds)這就是結果:

|1988 | jun | 27.9 | Neumayer 
|1997 | nov | 26.9 | Neumayer 
|1981 | jul | 26.8 | Neumayer 
|2002 | jun | 25.8 | Neumayer 
|2006 | aug | 25.6 | Neumayer 
|1989 | apr | 25.5 | Neumayer 
|1995 | aug | 25.5 | Neumayer 
|1981 | may | 25.4 | Neumayer 
|1999 | aug | 25 | Neumayer 
    |8 | sep | 25 | Signy 

通知的最後一行的年柱被切斷。現在,當我運行,運行的是完全相同的查詢一個C程序,這是結果:

988 jun 27.9 Neumayer 
997 nov 26.9 Neumayer 
981 jul 26.8 Neumayer 
002 jun 25.8 Neumayer 
006 aug 25.6 Neumayer 
989 apr 25.5 Neumayer 
995 aug 25.5 Neumayer 
981 may 25.4 Neumayer 
999 aug 25  Neumayer 
958 sep 25  Signy 

我認爲,必須有一些做與視圖設置?這是相同的查詢,相同的數據,但有時年份列被截斷。

+0

其實'decimal'變得圓了。你能把這個字段改成「浮動」嗎?我還在想。 – jiveturkey

+0

只是將模式更改爲浮動模式並且工作。不知道爲什麼,但你現在是1/1。你能修好年份專欄嗎? – alexs973

+0

是的,這很奇怪。 'INT'默認爲'INT(11)',但嘗試給它一個明確的限制 - INT(5)' – jiveturkey

回答

0

我找到了解決方案。我的原始.txt文件是在Windows中創建的。然後我將它(通過WinSCP)導入到我的Linux機器中。我發現Linux對字符做了一件奇怪的事情,有時Linux和微軟之間的字符轉換可能會有些粗糙。所以爲了測試這個理論,我在Linux中打開了一個新的vi,並複製並粘貼原始.txt文件中的數據。然後我使用新的vi文件將數據加載到我的表中。它的工作,沒有錯誤。