csv文件導入Mysql的一些問題

背景

導入一些csv數據到Mysql,記錄一下過程中出現的問題

數據源

csv文件的數據源爲Sql Server,使用Sql Server導出csv文件的過程就不在贅述,過程中出現的問題如下:

正在驗證 (錯誤) 消息 錯誤 0xc020802e: 數據流任務: “輸入列“C301”(123)”的數據類型爲
DT_NTEXT,ANSI 文件不支持此數據類型。請改用 DT_TEXT,然後使用數據轉換組件將數據轉換爲 DT_NTEXT。 (SQL
Server 導入和導出嚮導)

錯誤 0xc004706b: 數據流任務: “組件“目標 - 1_TXT”(91)”驗證失敗,返回的驗證狀態爲“VS_ISBROKEN”。
(SQL Server 導入和導出嚮導)

錯誤 0xc004700c: 數據流任務: 一個或多個組件未能通過驗證。 (SQL Server 導入和導出嚮導)

錯誤 0xc0024107: 數據流任務: 任務驗證期間出錯。 (SQL Server 導入和導出嚮導)

出現這樣的問題爲字段類型兼容的問題,要在導入爲csv時勾選unicode,這樣就不會出現這樣的錯誤

LOAD DATA INFILE

將csv文件導入mysql,我們使用LOAD DATA INFILE的方式,這種方式導入的速度很快。LOAD DATA INFILE的使用方式將會另外的博客中進行介紹。下面主要介紹在使用的過程中遇到的錯誤:

secute-file-priv

ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

這個是mysql爲了保護數據安全性的設定,secute-file-priv這個參數來限制數據的導入和導出的效果,在執行LOAD DATA、SELECT … INTO OUTFILE等語句時,需要用戶具有file的權限。

  • secute-file-priv爲空,這個變量沒有效果,允許任意的導入和導出的操作
  • secute-file-priv設爲一個目錄名,MySQL服務只允許在這個目錄中執行文件的導入和導出操作。這個目錄必須存在,MySQL服務不會創建它;
  • secute-file-priv爲NULL,MySQL服務會禁止導入和導出操作。這個參數在MySQL 5.7.6版本引入

我們可以在mysql下執行如下命令查看當前secute-file-priv的狀態:

show variables like '%secure%';

下圖爲當前的狀態,我們可以把需要導入的文件放在/var/lib/mysql-files,這樣便可以進行數據的導入操作了
這裏寫圖片描述

Invalid utf8 character string

ERROR 1300 (HY000): Invalid utf8 character string: ”

出現這樣的錯誤,爲導入的csv格式中有不符合utf8的類型的數據
我們去查看csv文件的數據類型,使用如下的指令:

file XXX.csv

這裏寫圖片描述
我們發現該文件的編碼格式爲UTF-16,後續我們將會對csv文件的編碼進行更改,使其適應我們設定的數據格式
linux下更改csv文件編碼格式,我們使用iconv進行操作。

iconv FactOrder_1w.csv -f UTF-16 -t UTF-8 -o FactOrder_utf8.csv 

格式爲

iconv 文件名 -f 初始文件編碼 -t 目標文件編碼 -o 目標文件名

更改之後我們再使用file去查看文件格式,發現該csv文件的編碼格式已經發生了變化,變成了utf-8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章