解决"mysql 导入csv row size too large"的方法

问题描述

当我们尝试将一个较大的CSV文件导入到MySQL数据库时,有时候会遇到"Row size too large"的错误。这是因为在导入的过程中,MySQL计算了每行的大小,如果超过了限制,就会出现这个错误。那么,如何解决这个问题呢?下面我将详细介绍解决方法。

解决流程

首先,我们需要将CSV文件导入到MySQL数据库中,而不触发"Row size too large"的错误。下面是具体的解决流程:

erDiagram
    CSV文件 --> MySQL数据库

步骤

步骤 操作 代码
1 创建表,设置行格式为DYNAMIC ```sql

CREATE TABLE your_table_name ( column1 INT, column2 VARCHAR(255), ... ) ROW_FORMAT=DYNAMIC;

| 2 | 用LOAD DATA将CSV文件导入到表中 | ```sql
LOAD DATA INFILE 'path/to/your/csv/file.csv' INTO TABLE your_table_name
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
``` |
| 3 | 禁用外键检查 | ```sql
SET foreign_key_checks = 0;
``` |
| 4 | 设置innodb_strict_mode为OFF | ```sql
SET GLOBAL innodb_strict_mode=OFF;
``` |
| 5 | 导入完毕后,重新启用外键检查 | ```sql
SET foreign_key_checks = 1;
``` |
| 6 | 恢复innodb_strict_mode为ON | ```sql
SET GLOBAL innodb_strict_mode=ON;
``` |

## 结论
通过以上步骤,我们成功解决了"mysql 导入csv row size too large"的问题。首先,我们需要创建表时设置行格式为DYNAMIC,然后使用LOAD DATA将CSV文件导入到表中。接着,禁用外键检查和设置innodb_strict_mode为OFF可以避免出现"Row size too large"的错误。最后,记得在导入完毕后重新启用外键检查和恢复innodb_strict_mode为ON。

希望以上方法对你有所帮助,如果有任何疑问,欢迎随时向我提问。祝学习顺利!