解決在將Excel表格導入到SQL Server資料庫時出現:Text was truncated or one or more characters had no match in the target code 的錯誤。將Excel表中最長的那條記錄移到第二行(即第一條記錄所在行)即可解決導入失... ...
編寫python爬蟲程式可以在電商、旅游等網站上爬取相關評論數據,這些數據可以用於詞雲製作、感情詞分析、提取關鍵詞等,也可以將爬取下來的數據以自己的方式進行展示。評論數據爬取下來後,就要考慮怎樣入庫,可以在爬蟲程式中編寫代碼直接入庫,也可以將爬取到的數據存到Excel表格中,再將Excel表格導入到資料庫中。在將Excel表格導入到SQL Server資料庫時可能會出現很多錯誤,這裡要解決的錯誤是:Text was truncated or one or more characters had no match in the target code。這是由於欄位大小(size)設置過小,而數據中有超過這個size的記錄從而導致了截斷(truncate)。
在SSMS中,可以編寫SQL語句或使用菜單創建數據表,併為表中的欄位設置大小(size)。在將Excel表格導入到資料庫時,欄位的大小又是怎麼確定的呢?在Excel表格中,第一行的各列值作為數據表(指資料庫中的table)中的各欄位名,第二行以後的每一行的記錄將作為數據表中的記錄。下麵兩張圖反映了Excel表中數據和數據表中數據的對應關係。
我們在SSMS中打開“景點概覽”數據表的設計視圖,查看各欄位的大小(size)。
Excel表在導入到資料庫後,欄位的Data Type(數據類型)是根據Excel表中第二行(即第一條記錄)的值推出的。如果第二行對應列的那個值是數字,資料庫中相應欄位的Data Type就是float型,如果值是字元,相應欄位的Data Type就是nvarchar(255)。將數字都作為float型,將字元都作為nvarchar(255)型可以避免一些截斷問題或高精度向低精度轉換等問題的出現。但如果某一個欄位的Data Type被設置成了nvarchar(255),而表中又有記錄的值的大小超過了255,那麼就會出現文章開頭所說的truncate(截斷)問題。所以,將Excel表格的各條記錄中,最長的那條記錄放到Excel表格的第二行(即第一條記錄的位置),就可以解決上面所說的問題。
一、準備Excel表格數據
Excel表格是可以導入到SQL Server的,但是WPS表格是不行的。準備好Excel表格後,另存為成合適的格式(Excel 2003或當前的Excel版本號,後面會用到)。這裡保存成Excel 2003(.xls)的格式。使用的數據是夫子廟景區的評論數據,首行只有一個欄位“評論”。
二、在SSMS中創建資料庫並導入Excel表格
打開SSMS,創建資料庫,右鍵資料庫-Tasks-Import Data,打開SQL Server Import and Export Wizard。
選擇Data source數據源為Microsoft Excel表格,選擇準備好的Excel文件,在Excel version中選擇相應的版本號。已自動勾選的First row has column names表示Excel表格中首行作為欄位值。
選擇導入Destination為:SQL Server Native Client,Server name是當前SQL Server連接的服務名,應該是自動出現的,Authentication選擇登錄方式(Windows身份驗證或SQL Server身份驗證),Database選擇Excel表導入到的資料庫。
選擇全部導入或者編寫SQL語句部分導入(我也不是很明白..)。這裡選擇:Copy data from one or more tables or views,全部導入。
Next之後,選擇Excel表中的工作簿(這裡只有一個夫子廟)。
點擊Edit Mappings,可以看到“評論”欄位的Data Type被設置成了nvarchar(255)。這裡要註意,雖然在這裡Size這個值是可以更改的,但是即使改為max後依然導入失敗(沒有解決)。
繼續後續步驟,執行導入。
點擊完成,導入失敗,查看出錯日誌。
三、整理Excel表格數據重新導入
上面的Excel表格導入失敗了,在整理表格之前,要在SSMS中將失敗的數據表刪掉(雖然失敗了,但是數據表的框架已經創建了)。如果對錶格進行SELECT查詢,結果是空的。
打開Excel表格,找到最長的那條記錄,並將其移動到第二行。
重新導入到資料庫,這次導入成功了。
在SSMS中,SELECT查詢剛纔導入進來的數據。Excel表格導入進來的數據表的名字是Excel表中數據簿的名字後+"$"符號。
四、總結
在將Excel表格導入到SQL Server資料庫時如果出現:Text was truncated or one or more characters had no match in the target code 這個錯誤,將Excel表中最長的那條記錄移到第二行即可(即第一條記錄所在行)解決導入失敗的問題。
另外,SQL Server資料庫的導入導出功能還可以實現資料庫中數據導出到Excel表或其他一些數據源之間的相互導入導出,讀者可以進行嘗試。