如何在MySQL中将字符串"3.82384E+11"转换为BIGINT?
解决Excel科学计数法ID转MySQL整数的问题
嘿,这个坑我之前踩过!Excel自动把长ID转成科学计数法的字符串,直接用CAST转整数确实会出问题——MySQL的CAST对这种科学计数法格式的字符串不买账,只会截取小数点前的部分,所以才得到3。给你几个靠谱的解决方法:
方法1:用CONVERT转高精度小数再转整数
MySQL的CONVERT函数支持把科学计数法字符串转成DECIMAL类型,之后再转成整数就没问题了。比如:
SELECT CONVERT('3.82384E+11', DECIMAL(20,0)) AS original_id;
如果需要转成无符号大整数,可以再加一层CAST:
SELECT CAST(CONVERT('3.82384E+11', DECIMAL(20,0)) AS UNSIGNED BIGINT) AS original_id;
注意这里DECIMAL(20,0)的精度要足够覆盖你的ID长度,避免溢出。
方法2:导入时直接处理(推荐)
如果是用LOAD DATA INFILE导入CSV,可以在导入过程中直接转换,不用先查再改:
LOAD DATA INFILE '/your/csv/path/file.csv' INTO TABLE your_target_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 根据你的CSV格式调整 (id_str, col2, col3) -- 先把科学计数法字符串读入字段 SET id_column = CONVERT(id_str, DECIMAL(20,0));
额外提醒:避免源头的精度损失
要注意的是,Excel转科学计数法的时候已经做了四舍五入(比如你例子里的382383816413被转成3.82384E+11,实际对应382384000000),如果要完全还原原始ID,最好从源头解决:在Excel里把ID列设置为文本格式再导出CSV,或者用文本编辑器打开CSV手动修正科学计数法的内容,这样导入时就不用处理转换问题了。
内容的提问来源于stack exchange,提问作者Leo Ribeiro
相关产品推荐
相关产品推荐

