百万excel导入mysql_百万级xlsx表格导入数据库的实现方案

需求是这样的,供应商给到一份 xlsx 表格(144MB),里面刚好有 100w 行数据(11列)。我需要把它们稍作处理后写入到 mysql 数据库

项目基于 Laravel,既然需要稍作处理,那我首先想到的就是找一个能读 xlsx 的 composer 包

我尝试过最知名的PhpSpreadsheet、对 Laravel 友好的 Laravel-Excel。然而不管是顺序读还是分块读,尝试各种方案最终都会因内存耗尽而中断,哪怕我给 PHP 分配了 8g 内存

这里点名表扬一下 spout,唯有它能在低内存占用的前提下正常顺序读取表格。但整体速度实在太慢,每秒仅13行 ,粗略一算要20多个小时。虽然能用但还是不太行

正苦恼之时,旁边的大佬给我指了条明路——

load data infile

我才学疏浅,这个关键字只在刚接触 mysql 时见过一眼,还从没用过。被这一点才醒悟过来,对呀,我何不把表格导进数据库再读取处理呢,那效率肯定比读 xlsx 高到不知哪里去了

不过 mysql 原生不支持 xlsx 文件的导入,需要先用 Excel 打开然后将它另存为 csv 格式。这一步视电脑配置而异,我这边耗时约1分钟

中文 Windows 下的 Excel 用的是 GBK 编码,而数据表一般都是 UTF-8。因此还需要转码

使用 VSCode 打开这个 csv 文件,里面的中文部分乱码,因为默认用的是 UTF-8 编码打开的。点击右下角的 UTF-8,选择 通过编码重新打开,输入 GBK 然后回车即可正常显示中文

再点击右下角的 GBK,选择 通过编码保存,输入 UTF-8,回车后即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值