解决Mysql导入csv中空值变为0的问题:导入数据时设定格式
2016-11-12 22:34
567 查看
网上许多优化教程以及官方均认为(http://www.jb51.net/article/24392.htm),空值置为0有利于节省空间,实际上Mysql也是这么做的,在导入数值型字段时,默认将空值置为0。
但实际中,数据本身的空值也是包含信息的,与0值并不一样。举个栗子,有一组数据:
null, null, 1, 2, 3
求均值时应该为(1+2+3)/3=2,但在默认情况下导入数据后其均值则会变为(0+0+1+2+3)/5=1.2了。两者包含的信息显然不一样。
如何才能在导入数据时保持空值?load data中提供了相关的解决方法,即在代码中加入空值的检测,如为空则将导入后的值设置为null。如我想把test.csv导入到数据库中,其中该文件中的数值包含空值,则在数据库创建好相应的test表后,对load data命令进行相应调整:
将原来的
改为:
test.csv中有a、b、c三个字段,b为数值且包含空值,则使用以上字段进行导入,保证空值不会被置为0。
此外,这种语句还有很多用途,比如要导入的c字段中为英文缩写格式的日期’01Jan2012’,这在导入时一般是使用字符型导入的,但可采用以上的方法,在导入时将其设置为日期。
以上语句使用str_to_date函数,指定相应的日期格式(具体可百度或谷歌其用法),则在导入后,数据库中显示为’2012-01-01’的标准日期格式。如果日期这里存在空值,这个函数会默认将其设为’0000-00-00’。
总的来说,load data这个函数的功能很强大~!
但实际中,数据本身的空值也是包含信息的,与0值并不一样。举个栗子,有一组数据:
null, null, 1, 2, 3
求均值时应该为(1+2+3)/3=2,但在默认情况下导入数据后其均值则会变为(0+0+1+2+3)/5=1.2了。两者包含的信息显然不一样。
如何才能在导入数据时保持空值?load data中提供了相关的解决方法,即在代码中加入空值的检测,如为空则将导入后的值设置为null。如我想把test.csv导入到数据库中,其中该文件中的数值包含空值,则在数据库创建好相应的test表后,对load data命令进行相应调整:
将原来的
load data local infile 'C:\\Users\\XXX\\Documents\\data\\test.csv' into table test fields terminated by ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\r\n' ignore 1 lines;
改为:
load data local infile 'C:\\Users\\XXX\\Documents\\data\\test.csv' into table test fields terminated by ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\r\n' ignore 1 lines (a, @b, c) set b = NULLif(@b,'') ;
test.csv中有a、b、c三个字段,b为数值且包含空值,则使用以上字段进行导入,保证空值不会被置为0。
此外,这种语句还有很多用途,比如要导入的c字段中为英文缩写格式的日期’01Jan2012’,这在导入时一般是使用字符型导入的,但可采用以上的方法,在导入时将其设置为日期。
load data local infile 'C:\\Users\\XXX\\Documents\\data\\test.csv' into table test fields terminated by ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\r\n' ignore 1 lines (a, @b, @c) set b = NULLif(@b,''), c = str_to_date(@c,'%d%b%Y') ;
以上语句使用str_to_date函数,指定相应的日期格式(具体可百度或谷歌其用法),则在导入后,数据库中显示为’2012-01-01’的标准日期格式。如果日期这里存在空值,这个函数会默认将其设为’0000-00-00’。
总的来说,load data这个函数的功能很强大~!
相关文章推荐
- mysql导入csv中文数据乱码问题分析与解决
- 关于mysql 导入大型数据问题的解决(转载,出处以忘)
- MySQL数据格式为MyISam时的Locked状态造成访问慢的问题解决
- 解决Solr对Mysql做数据导入时内存溢出的问题
- 解决mysql导入导出数据乱码问题
- paip.导入数据英文音标到数据库mysql为空的问题之道解决原理
- MySQL如何导入csv格式数据文件解决方案
- mysql导入导出.csv格式数据
- mysql使用SQLyog导入csv数据不成功的解决方法
- 解决mysql导入导出数据乱码问题
- 如何解决mysql导入数据乱码问题
- 用SQL语句解决mysql导入大数据文件的问题
- paip.导入数据英文音标到数据库mysql为空的问题之道解决原理
- 解决将excel数据导入sqlserver后数字格式不正确的问题的方法
- Mysql 导入导出csv 中文乱码问题的解决方法
- Bash中使用MySQL导入导出CSV格式数据
- MySQL如何导入csv格式数据文件解决方案
- MySQL如何导入csv格式数据文件解决方案
- 如何解决MySQL导入大数据出现的问题
- Mysql 导入导出csv 中文乱码问题的解决方法