解决mysql导数据时,格式不对、导入慢、丢数据的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40683253/article/details/80773528

    如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb4,因此现在UTF8的速度要快得多,在特定查询时速度提高了1800%!

mysql8.0 安装教程

    但是如果时间等不及,就先用下面的办法快速解决一下。


问题一:格式不对(常出现时间格式不对的情况);

方法1:将excel文件另存为csv,再导入数据库;

方法2:导入的第一步时,默认编码方式是65001(UTF-8),可以尝试选择【10008 (MAC - Simplified Chinese GB 2312)】,或者【Current Windows Codepage】,这是常见的三种编码,多试几次,总能找到匹配你的电脑的编码格式。


方法3:在导入的最后几步,可以设置时间那一栏位的类型为datetime或者time,总之数据是什么类型就尽量选择什么类型,默认都是varchar。




问题二:导入慢(数据量大导致的慢还请慢慢等他导完);

方法1:如果是别人导给你的数据(不管是sql文件、csv文件、excel文件),你都导的极慢,导入速度一般是:sql文件>csv文件>excel文件。那就让他给你重新导一份吧。不管他之前是什么方式导的,请让他严格按照下面的步骤重新导一次:

打开要导出的表--在打开表的右上角有一个导出--用这个导出导;

注意:上述的【导出】与右键表的选项中的【导出向导】不一样,用【导出向导】导出来的表有时候会比较慢,所以我一般都用右上角的【导出】来导出数据。



问题三:丢数据(一般是用excel的时候会出现丢数据的情况);

方法1:把Excel另存为csv再导入;

方法2:可能是原始数据中有一列数据量比较大,比如成绩表的最后一列可能是老师的评语,而这一列中有那么几条数据评语写太多了,超过mysql默认的单个package的限制(一般是255),因此在导入的最后一步,把评语这一列的类型改为text,长度改为65535,65535是text类型的最大长度,日常记不住的话,就填60000,基本上就够用了,而且还好记。


方法3:如果是导出的时候丢数据,那么可能是选择了“Excel数据表”,按照下图的方式找适合你的导出方式吧。



但如果上面的办法都没有涵盖你要解决的问题,那么你是不是在mysql导出数据的时候出现问题了呢?不妨看看下面这篇文章。

解决mysql导出scv文件乱码、蹿行的问题




展开阅读全文

ASP.NET 导入Excel数据,量大时,导入慢的问题

08-15

以下是我的导入代码,当Excel数据为1000条时,导入就要20秒,请问下面写法有什么改进,能让时间缩短?求高手解答?rn[code=csharp]rntryrn rn string fileName = excelUploadUrl;rn Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();rn object oMissing = System.Reflection.Missing.Value;rn excel.Application.Workbooks.Open(fileName, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);rn Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks[1];rn Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.Worksheets[1];rnrn string strSheetName = sheet.Name;rn string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + fileName + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";rn string strExcel = "select * from [" + strSheetName + "$]";rn DataSet ds = new DataSet();rn OleDbConnection conn = new OleDbConnection(strConn);rn conn.Open();rn OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);rn adapter.Fill(ds);rn DataRow[] dr = ds.Tables[0].Select();rn int ss = ds.Tables[0].Rows.Count;rn int rowsnum = ds.Tables[0].Rows.Count;rn if (rowsnum == 0)rn rn return Json(new OperateReturnInfo(OperateCodeEnum.Failed, "导入失败!Excel表为空表,无数据!"), JsonRequestBehavior.AllowGet);rn rn //检查门店编码是否存在rn bool IsExist = false;rn for (int i = 1; i < rowsnum; i++)rn rn bool result = StoreIPManager.CheckStoreCode(dr[i][0].ToString());rn if (result)rn rn IsExist = true;rn return Json(new OperateReturnInfo(OperateCodeEnum.Failed, "导入失败!门店编码'" + dr[i][0].ToString() + "'已经存在,请修改后再重新导入!"), JsonRequestBehavior.AllowGet);rn rn rn //全部核查通过,执行插入数据库rn if (!IsExist)rn rn StoreIPInfo store = new StoreIPInfo();rn for (int i = 1; i < rowsnum; i++)rn rn store.StoreCode = dr[i][0].ToString();rn store.IPAddress = dr[i][1].ToString();rnrn StoreIPManager.InsertStoreIP(store);rn excel.Quit();rn rn int num = rowsnum - 1;rn this.Dispose();rn return Json(new OperateReturnInfo(OperateCodeEnum.Success, "成功导入" + num + "条配置信息!"), JsonRequestBehavior.AllowGet);rn rn elsern rn this.Dispose();rn return null;rn rn rn catch (Exception ex)rn rn return Json(new OperateReturnInfo(OperateCodeEnum.Failed, "导入失败!" + ex.Message), JsonRequestBehavior.AllowGet);rn rn[/code] 论坛

数据mysql 上的问题

07-02

try rn session = getSession();rn agentContext = session.getAgentContext();rn docContext = agentContext.getDocumentContext();rn rn rn Class.forName("com.mysql.jdbc.Driver"); rn String url = "jdbc:mysql://10.71.48.15:3306/scweb";rn rn conn = DriverManager.getConnection(url, "root", "12345678");rn rn if(conn != null)rnstmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);rnrn rn strname = docContext.getItemValueString("OverTureNo"); rn strgeneral = docContext.getItemValueString("Category"); rn strbir_year = docContext.getItemValueString("FallDue");rn strbir_month = docContext.getItemValueString("CaseFor"); rn strbir_day = docContext.getItemValueString("CaseBy"); rn rn rn content=docContext.getItemValueString("CaseBody"); rn rn strSQL = new StringBuffer();rn rn strSQL.append("INSERT INTO tbl_hzsc_suggestion_ta(serialNo,contentCategory,conferenceName,reason,taPeople,committeeUnit,content,documentID) ");rn strSQL.append("VALUES ('" + strname + "',");rn rn strSQL.append("'" + strgeneral + "',");rn strSQL.append("'" + strbir_year + "',");rn strSQL.append("'" + strbir_month + "',");rn rn strSQL.append("'" + strname + "')");rn rn System.out.println(strSQL.toString());rn stmt.execute(strSQL.toString());rn System.out.println("插入成功");rn rn rn我是从Domino 数据库上导数据到mysql 上rndomino 是一个文本数据库,所有数据都在 视图里面rn以上代码可以通过,可是只能一条一条地导数据,不能全部一起导 本人不会java 的 这些代码也是从网上拿过来用的rnrnagentContext = session.getAgentContext();rndocContext = agentContext.getDocumentContext();rn你是取得了当前的文档对象后将这个对象里的相关数据导到mysql里,处理的是单个文档。rn如果要求全选文档就可以导过去,那就在代理里取得你所选择的文档集,然后一个循环就可以了撒。 rn这是网上一个朋友 帮我分析的,不过他也不会java rn高手们教教我!rn 论坛

没有更多推荐了,返回首页