Excel另存CSV应选“CSV UTF-8(逗号分隔)”,确保UTF-8无BOM、纯逗号分隔、无合并单元格;MySQL导入需字段顺序严格一致、显式声明FIELDS ENCLOSED BY '"',并用LOAD DATA LOCAL INFILE或服务端路径配合secure_file_priv。
Excel另存CSV时编码和分隔符怎么选才不乱码
mysql导入csv最常卡在第一步:excel导出的文件根本读不对。核心问题不是mysql,是excel默认用utf-16 + bom + 逗号+双引号包裹,而load data infile默认只认utf-8、制表符或纯逗号且不处理bom。
- 必须在Excel里「另存为」→ 选择「CSV UTF-8(逗号分隔)(*.csv)」——注意括号里有“UTF-8”,这是Windows新版Excel才有的选项;老版本只能用记事本二次转码
- 导出前手动删掉Excel里所有合并单元格、公式、批注,否则CSV里会空行、错列或出现
#N/A、#REF! - 如果字段含换行符或逗号(比如地址栏),Excel默认用英文双引号包裹该字段,MySQL能识别,但前提是
FIELDS ENCLOSED BY '"'必须显式写进导入语句 - 用
file命令或VS Code编码插件确认最终CSV确实是UTF-8无BOM;有BOM会直接导致第一列字段名前面多出
LOAD DATA INFILE导入时字段顺序和类型怎么对齐
即使CSV内容干净,LOAD DATA INFILE也会因字段顺序/类型不匹配静默跳过数据或报错Incorrect integer value。
- MySQL表字段顺序必须和CSV列顺序严格一致——不能靠字段名映射,它只按位置匹配
- 日期字段(如
2024-03-15)要确保MySQL列是DATE或DATETIME类型;若CSV里是15/03/2024格式,得用STR_TO_DATE(@col2, '%d/%m/%Y')做转换 - 空字符串
""导入到NOT NULL的数字列会报错,需加SET col3 = NULLIF(@col3, '') - 执行前先用
SHOW CREATE TABLE table_name核对字段名、类型、是否允许NULL,再逐列对照CSV头行
Windows下LOAD DATA INFILE报错“File not found”怎么办
不是文件路径错了,是MySQL默认禁止从客户端本地读文件,尤其Windows上路径斜杠、空格、权限全在捣乱。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- 错误信息
ERROR 29 (HY000): File './data.csv' not found说明MySQL在找服务端路径,不是你电脑桌面那个CSV - 要么把CSV放到MySQL服务端的
secure_file_priv目录下(查路径用SHOW VARIABLES LIKE 'secure_file_priv';),然后用服务端绝对路径,如LOAD DATA INFILE '/var/lib/mysql-files/data.csv' - 要么改用
LOAD DATA LOCAL INFILE——但需要客户端和服务端都开启local_infile(启动参数或配置文件加local_infile=ON),且MySQL 8.0+默认禁用,还得加--local-infile=1连数据库 - 路径中不要用中文、空格、括号;Windows下用正斜杠
/或双反斜杠\,别用单反斜杠(会被当转义)
用Python pandas.to_sql替代手工导入更稳吗
真遇到字段多、类型杂、要预处理的场景,pandas.to_sql比手写LOAD DATA省心,但慢且容易忽略隐式类型转换。
- Excel直接读:
df = pd.read_excel("data.xlsx", dtype=str)——先全读成字符串,避免pandas自动把"001"转成1 - 日期列提前转:
df["date"] = pd.to_datetime(df["date"], errors="coerce"),errors="coerce"把非法值变NaT,不会崩 - 写入时指定
if_exists="append",别用"replace"——后者会删表重建,索引、外键全丢 - 大批量(>1万行)务必加
chunksize=500,否则内存爆或MySQL超时;同时设method="multi"让pandas拼成一条INSERT带多值,比逐条快10倍以上
真正麻烦的从来不是“怎么导”,而是Excel里那些人眼看不见的空格、不可见字符、自动编号格式、区域设置导致的千分位符号——这些在CSV里藏得深,导入后数据看着正常,算总数时却总差几条。










