1、实验内容:
利用SQL语句“load data ”将“.txt”文本文件中的数据导入到mysql中
2、实验过程:
首先我创了一个txt(也可以是其他的),设置其编码为utf-8,在windows下默认编码是ANSI。
设置方法,打开一个空txt文件,点击另存,编码显示是ANSI,换成UTF-8
张三 31 北京 3000
李四 25 杭州 4000
王五 45 上海 4500
小明 29 天津 2331
假设以上就是一个txt文件中的内容(文件名叫pid.txt,在E盘中)
根据这个表中的内容创建一个表:
mysql> create table per1(
-> name varchar(),
-> age int,
-> city varchar(),
-> salary int
-> );
Query OK, rows affected (0.64 sec)
然后导入数据,当然,有很大几率会出错:因为你很有可能遇上
mysql secure_file_priv 文件读写问题(这是一个关于能否允许导入或者导出mysql与外界的设置)
mysql> load data infile "E:\vs\ppid.txt"
-> into table per(name,age,city,salary);
ERROR (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql> show variables like '%secure%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_file_priv | NULL |
+--------------------------+-------+
rows in set, 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回车符换行符表示一行了,找下一行数据。
到此才算导入结束。不过,张三你咋这么突出??还不走寻常路。
查询过后,这是关于二进制某不可读字符的问题。
附上类似的问题解决方案,这是链接。