解決將Excel表導入到SQL Server數據庫時出現Text was truncated or one or more characters had no match in the target code錯誤


編寫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表中數據和數據表中數據的對應關系。

景點概覽示例

景點概覽示例2

我們在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)的格式。使用的數據是夫子廟景區的評論數據,首行只有一個字段“評論”。

  將Excel表格另存為合適的格式

  夫子廟景區評論

二、在SSMS中創建數據庫並導入Excel表格

  打開SSMS,創建數據庫,右鍵數據庫-Tasks-Import Data,打開SQL Server Import and Export Wizard。

  右鍵數據庫導入Excel

  SQL Server Import and Export Wizard

  選擇Data source數據源為Microsoft Excel表格,選擇准備好的Excel文件,在Excel version中選擇相應的版本號。已自動勾選的First row has column names表示Excel表格中首行作為字段值。

  選擇要導入的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,全部導入。

  全部導入或query選擇導入

  Next之后,選擇Excel表中的工作簿(這里只有一個夫子廟)。

  選擇夫子廟表

  點擊Edit Mappings,可以看到“評論”字段的Data Type被設置成了nvarchar(255)。這里要注意,雖然在這里Size這個值是可以更改的,但是即使改為max后依然導入失敗(沒有解決)。

  查看夫子廟評論字段的size

  繼續后續步驟,執行導入。

  后續步驟1

  后續步驟2

  點擊完成,導入失敗,查看出錯日志。

  報錯

三、整理Excel表格數據重新導入

  上面的Excel表格導入失敗了,在整理表格之前,要在SSMS中將失敗的數據表刪掉(雖然失敗了,但是數據表的框架已經創建了)。如果對表格進行SELECT查詢,結果是空的。

  查詢到了空結果

  打開Excel表格,找到最長的那條記錄,並將其移動到第二行。

  找到最長的那條記錄

  將最長的那條記錄移到第二行

  重新導入到數據庫,這次導入成功了。

  查看夫子廟評論字段的size2

  導入成功

  在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表或其他一些數據源之間的相互導入導出,讀者可以進行嘗試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM