在將 SQL Server 2008 的 5 萬筆資料遷移至 MongoDB 時,我嘗試使用 Management Studio 直接匯出 CSV,再透過 mongoimport 匯入,卻遇到 invalid utf8 character 錯誤。經排查,預設匯出的 CSV 採用系統預設編碼(非 UTF-8),導致 MongoDB 無法正確解析。
起初嘗試用 OpenOffice 開啟 CSV 並另存為 UTF-8,雖解決編碼問題,但發現標題列與資料列嚴重錯位,標題堆疊在一起,資料雖能匯入卻完全無法使用。這讓我不得不尋找更穩健的方案。
改用「複製資料到 Excel → 另存為 CSV」的方式,匯入 MongoDB 竟然一切正常。奇怪的是,Excel 同樣使用系統預設編碼,為何不會觸發 UTF-8 錯誤?這其中的差異值得深究,但當下優先解決大量資料的匯出效率問題。
在 Management Studio 中依序開啟:
工具 → 選項 → 查詢結果 → SQL Server → 以方格顯示結果
勾選 「在複製或儲存結果時包含資料行標題」。
設定完成後,再次以右鍵「儲存結果為 CSV」即可直接獲得帶標題列、編碼相容的檔案,無需額外轉碼。
mongoimport -d local -c testtable --type csv --headerline --file c:\inmongo.csv
加上 --headerline 參數指示首行為標題,即可一次成功匯入。這一方法既保留標題,又避免編碼與欄位錯位問題,適合大量資料遷移。
編碼問題看似玄學,實則源於工具預設行為差異。善用 SSMS 內建選項,配合 mongoimport 參數,即可建立穩定、可重複的遷移流程。若您也遇過類似困擾,不妣試試這套「零轉碼、帶標題」的組合拳。