1、實驗內容:
利用SQL語句“load data ”將“.txt”文本文件中的數據導入到mysql中
2、實驗過程:
首先我創了一個txt(也可以是其他的),設置其編碼為utf-8,在windows下默認編碼是ANSI。
設置方法,打開一個空txt文件,點擊另存,編碼顯示是ANSI,換成UTF-8
1 張三 31 北京 3000 2 李四 25 杭州 4000 3 王五 45 上海 4500 4 小明 29 天津 2331
假設以上就是一個txt文件中的內容(文件名叫pid.txt,在E盤中)
根據這個表中的內容創建一個表:
1 mysql> create table per1( 2 -> name varchar(20), 3 -> age int, 4 -> city varchar(20), 5 -> salary int 6 -> ); 7 Query OK, 0 rows affected (0.64 sec)
然后導入數據,當然,有很大幾率會出錯:因為你很有可能遇上
mysql secure_file_priv 文件讀寫問題(這是一個關於能否允許導入或者導出mysql與外界的設置)
1 mysql> load data infile "E:\vs\ppid.txt" 2 -> into table per(name,age,city,salary); 3 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 4 mysql> show variables like '%secure%'; 5 +--------------------------+-------+ 6 | Variable_name | Value | 7 +--------------------------+-------+ 8 | require_secure_transport | OFF | 9 | secure_file_priv | NULL | 10 +--------------------------+-------+ 11 2 rows in set, 1 warning (0.01 sec)
我的secure_file_priv為空,說明不允許導入導出數據,需要在my.ini中修改secure_file_priv的值,一般會沒有secure_file_priv,所以為了安全認為secure_file_priv為不允許,手動添加secure_file_priv
1 secure_file_priv = '莫目錄名' #只允許在這個目錄里做事
2 secure_file_priv = #這里不寫 表示任意一個路都可以導入導出
3 secure_file_priv = NULL #不允許導入導出,啥都不許干。
#綜上所訴,我選擇 secure_file_priv =
由上圖可看出一開始我也寫了一個目錄,后來把路徑給注釋掉了。
下方有 # 號往后的一些配置在此截圖的上方已經配置好了,為了某個時候可能需要 就將只其注釋掉,而不是刪去。
( ps:改完my.ini內容過后要重啟mysql。net stop mysql , net start mysql ,而不是關掉命令行界面)
言歸正傳,開始干正事了。。。
這是一個更改后的utf-8的txt文件
先登陸
選擇一個庫,不然呆會兒在那個庫中工作都不知道,它會報錯。
然后導入,導入,當然,不可避免出錯了,顯示錯位,並且還將”4 小明 29 天津 2331“這一行數據給了name屬性!!
age,city屬性是這模樣。
加上LINES TERMINATED BY '\r\n' 添加了兩次,還是都在name里面去了,不過貌似順眼了一點點。
添加 FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\r\n';
‘ ’ 意思是空格為界分開,\r\n回車符換行符表示一行了,找下一行數據。
到此才算導入結束。不過,張三你咋這么突出??還不走尋常路。
查詢過后,這是關於二進制某不可讀字符的問題。
附上類似的問題解決方案,這是鏈接。