要使用 LOAD DATA INFILE
将 CSV 文件导入运行在容器中的 MySQL,并处理 CSV 文件中的 null 值,你可以遵循以下步骤:
1. 准备 CSV 文件
确保 CSV 文件的格式与你要导入的 MySQL 表格结构相匹配。对于 null 值,确保 CSV 文件中的 null 值以你选择的格式表示(例如,空字符串、特定的文本如'NULL'等)。
2. 复制 CSV 文件到容器
首先,你需要将 CSV 文件从宿主机复制到运行 MySQL 的容器内。使用 Docker 的 cp
命令来完成这个步骤。
sh
docker cp /path/to/yourfile.csv my-mysql-container:/path/in/container
这里,/path/to/yourfile.csv
是宿主机上的 CSV 文件路径,my-mysql-container
是你的 MySQL 容器的名称或 ID,/path/in/container
是容器内的目标路径。
3. 导入 CSV 文件
然后,进入 MySQL 容器的命令行界面并执行 LOAD DATA INFILE
命令。
首先,进入容器的交互式 shell:
sh
docker exec -it my-mysql-container bash
然后,在 MySQL 命令行中执行类似下面的 SQL 命令来导入数据:
sql
LOAD DATA INFILE '/path/in/container/yourfile.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(column1, column2, @var3, column4, ...)
SET column3 = NULLIF(@var3,'NULL');
在这个命令中,your_table
是目标表名,column1, column2, @var3, column4, ...
是表中的列。对于可能包含 null 值的列(假设这里是 column3
),使用一个变量(如 @var3
)来接收原始数据,然后使用 SET
子句和 NULLIF
函数来把表示 null 的特定文本转换为真正的 null 值。在这个例子中,如果 @var3
的值是 'NULL',它将被转换为 SQL 的 NULL
。
4. 注意
- 确保在
LOAD DATA INFILE
语句中正确设置字段分隔符、文本定界符和行终止符,以匹配 CSV 文件的格式。 - 考虑到权限问题,你可能需要使用
LOCAL
关键字(即LOAD DATA LOCAL INFILE
),但这取决于你的 MySQL 配置和 Docker 容器设置。 - 如果 CSV 文件中第一行是列标题,使用
IGNORE 1 LINES
来忽略它。如果没有列标题,则移除这部分。 - 在执行这些步骤之前,请确保你有足够的权限来执行 SQL 命令,并且你的 MySQL 用户有足够的权限来读取文件。