MySqlBulkLoader后数据库出现0000-00-00 00:00:00数据问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: //这是在.Net中使用MySqlBulkLoader//为什么使用MySqlBulkLoader,因为 20多万数据,导入数据库就几秒而已,一个字:快!其他的批量插入基本都比这种方法慢。

//这是在.Net中使用MySqlBulkLoader

//为什么使用MySqlBulkLoader,因为 20多万数据,导入数据库就几秒而已,一个字:快!其他的批量插入基本都比这种方法慢。

//CsvWriter 使用的是CSVHelper类库

            string tmpPath = Path.GetTempFileName();
            using (var csv = new CsvWriter(new StreamWriter(tmpPath)))
            {
                csv.WriteRecords(data);
            }
            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                //MySqlTransaction tran = null;
                try
                {
                    conn.Open();
                    //tran = conn.BeginTransaction();
                    MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
                    {
                        FieldTerminator = ",",
                        FieldQuotationCharacter = '"',
                        EscapeCharacter = '"',
                        LineTerminator = "\r\n",
                        FileName = tmpPath,
                        NumberOfLinesToSkip = 1,
                        TableName = tableName,
                    };
                    //bulk.Columns.AddRange(table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
                    insertCount = bulk.Load();
                    //tran.Commit();
                }
                catch (MySqlException ex)
                {
                    //if (tran != null) tran.Rollback();
                    throw ex;
                }
            }
            File.Delete(tmpPath);

保存时,如果为空,默认会变成 0000-00-00 00:00:00。

如果是这样,那也没问题,再一条语句更新为null就行了,关键问题在下面:



SELECT * FROM ripeorderdetailreportdata WHERE OrderCreateDate ='0000-00-00 00:00:00';

可以查出数据。


1 queries executed, 0 success, 1 errors, 0 warnings

UPDATE ripeorderdetailreportdata SET OrderCreateDate = NULL WHERE OrderCreateDate ='0000-00-00 00:00:00'

错误代码: 1292
Incorrect datetime value: '0000-00-00 00:00:00' for column 'OrderCreateDate' at row 1

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0.001 sec



猜测这可能是 MySqlBulkLoader 导致的问题。

但有个解决办法 ,就是在值为空时,显式赋值 DateTime.MinValue ,查了值是 0001-01-01 00:00:00  ,这样,后面再去更新字段为null,就ok了,更新也快,基本在1秒内完成,没报错。



更新:2016-08-11

解决方案:用一个dto model类转换,相关字段改成string


由于 DataTime? 可空类型,csv生成时会直接为空,例如:

123,,‘张三’

如果用一个另外一个dto类转换,把相同的字段,转换成string,那么值为空时,生成的csv文件格式如下:

123,NULL,‘张三’

这样bulk load插入数据库就会是空,而不是0000-00-00 00:00:00,这样就ok了。





相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
1月前
|
SQL 开发框架 JavaScript
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
49 3
|
1月前
|
存储 数据管理 数据处理
数据之光:探索数据库技术的演进之路
数据之光:探索数据库技术的演进之路
60 1
|
1月前
|
存储 运维 关系型数据库
数据的力量:构筑现代大型网站之数据库基础与应用
数据的力量:构筑现代大型网站之数据库基础与应用
49 0
|
29天前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
17 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
28 0
|
1月前
|
NoSQL Java 数据库连接
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
347 1
|
2月前
|
关系型数据库 MySQL 数据库
|
2天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
8 1
|
3天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为&#39;张三&#39;,`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, &#39;张三&#39;, 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES (&#39;张三&#39;, 20)`。
5 2