You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入CSV至MariaDB/MySQL时遇整数值错误求助

解决酒店表导入时Auto-Increment列的赋值错误问题

嘿,这个问题我之前帮不少开发者排查过,本质是导入时的字段映射逻辑出错了——虽然你把hotelId设为auto_increment,但数据库不知道要跳过这个列,还是会默认把CSV里的第一列内容往这个字段里塞,而wolfinns1显然不是整数,所以触发了错误。下面给你几个直接可行的解决思路:

1. 导入时明确指定要插入的列(最推荐)

当使用LOAD DATA INFILE或者其他导入工具时,一定要列出除了hotelId之外的所有字段,让数据库自动为auto_increment列生成值。举个具体的SQL例子:

假设你的酒店表结构是:

CREATE TABLE hotel (
    hotelId INT AUTO_INCREMENT PRIMARY KEY,
    hotelName VARCHAR(100) NOT NULL,
    address VARCHAR(255),
    phone VARCHAR(20)
);

而你的CSV内容(假设第一行是表头)是:

hotelName,address,phone
wolfinns1,123 Main St,555-1234
...

那正确的导入命令应该是:

LOAD DATA INFILE '/path/to/your/hotels.csv'
INTO TABLE hotel
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' -- 如果你的字段有引号包裹的话
LINES TERMINATED BY '\n'
IGNORE 1 ROWS -- 跳过CSV的表头行
(hotelName, address, phone); -- 这里只写需要从CSV读取的列,顺序要和CSV完全一致

这样数据库就知道:hotelId不用从CSV拿值,自动生成就行,剩下的列按顺序匹配CSV内容。

2. 确认表结构的正确性

先再检查一遍hotelId的属性,确保它确实是auto_increment:

DESCRIBE hotel;

查看输出里hotelId的Extra列,应该显示auto_increment,如果没有的话,需要先修改表结构:

ALTER TABLE hotel MODIFY COLUMN hotelId INT AUTO_INCREMENT PRIMARY KEY;

3. 验证CSV的格式(补充排查)

虽然你说已经转成Unix格式,但可以再确认一下换行符是否正确(避免因换行符导致的字段错位):

cat -A your_hotels.csv

正常的Unix格式换行符会显示为$,如果看到^M,说明还是Windows格式,需要再转换一次:

dos2unix your_hotels.csv

4. 避免的错误操作

不要尝试在CSV的第一列留空来适配hotelId——这种方式很不稳定,一旦CSV有表头或者字段顺序变动,就会再次出错,指定列名的方式才是最可靠的。

内容的提问来源于stack exchange,提问作者chikitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:49:15