如何在MySQL Workbench中导入含美元符号的货币数据?
解决方案:处理含美元符号的MySQL导入问题
一、使用LOAD DATA INFILE完整导入并转换数据
这是处理大数据集最高效的方式,直接在SQL中完成所有格式转换,无需依赖Excel。
1. 创建目标表
先创建符合业务需求的表结构,货币字段建议用DECIMAL类型(比DOUBLE/FLOAT更适合存储金额,避免浮点精度误差):
CREATE TABLE furniture_transactions ( transaction_date DATETIME, transaction_id INT, customer_id INT, product VARCHAR(50), product_sku VARCHAR(20), product_color VARCHAR(50), product_price DECIMAL(10,2), quantity_purchased INT, purchase_total DECIMAL(10,3), revenue DECIMAL(10,2) );
2. 编写导入脚本
通过临时变量接收原始字符串,再转换为目标格式:
LOAD DATA LOCAL INFILE 'Downloads/Lauren-s-Furniture-Store-Transaction-Table.csv' INTO TABLE furniture_transactions FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 若CSV字段用双引号包裹,取消注释此句 LINES TERMINATED BY '\n' IGNORE 1 ROWS -- 跳过CSV的表头行 ( @date_raw, transaction_id, customer_id, product, product_sku, product_color, @price_raw, quantity_purchased, purchase_total, @revenue_raw ) SET transaction_date = STR_TO_DATE(@date_raw, '%m/%d/%Y %H:%i'), product_price = CAST(REPLACE(@price_raw, '$', '') AS DECIMAL(10,2)), revenue = CAST(REPLACE(@revenue_raw, '$', '') AS DECIMAL(10,2));
关键注意点:
- 文件路径中的反斜杠需改为正斜杠(Windows系统也支持),若用双反斜杠需转义为
\\ - 若金额包含千分位逗号(如
$1,234.56),需嵌套REPLACE处理:REPLACE(REPLACE(@price_raw, '$', ''), ',', '') - 确保MySQL开启了
LOCAL_INFILE权限,否则无法读取本地文件
二、MySQL Workbench导入向导的处理方法
如果习惯用图形化工具导入,可在向导中设置字段转换规则:
- 进入导入向导的Set Data Types步骤
- 找到
产品单价和营收列,将数据类型改为DECIMAL(10,2) - 在列的Expression输入框中填写转换规则,比如
REPLACE(product_price, '$', '') - 继续完成后续导入流程即可
三、之前尝试失败的原因说明
- 直接修改字段类型为数值型失败:原始数据包含
$符号,MySQL无法自动将含非数字字符的字符串转换为数值 - 使用CAST直接转换带
$的字段得到0:MySQL转换字符串为数值时,会从左到右读取,遇到第一个非数字字符就停止,$13.99会被识别为0,必须先移除$再转换 - 之前的LOAD DATA脚本无数据导入:脚本仅定义了单个字段,未匹配CSV的多列结构,且路径格式可能有误
内容的提问来源于stack exchange,提问作者Rowen Webb
相关产品推荐
相关产品推荐

