如何使用Julia向MySQL插入文本数据,遇String15绑定错误如何解决?
问题原因
报错和MySQL表的字段类型无关,是CSV.jl默认对短字符串使用String15这类定长优化存储类型(来自InlineStrings.jl库),而你当前使用的MySQL.jl版本的参数绑定方法bind!没有适配该类型,仅支持原生String类型作为文本参数输入,因此触发了方法匹配错误。
你修改为数值类型后运行正常,是因为CSV读取的数值本身就是Julia原生的Int/Float类型,MySQL.jl本身支持这类参数的绑定,和表字段的类型要求无关,你原本设置的VARCHAR(20)文本字段类型是正确的。
解决方案
- 方案一:读取CSV时强制指定字符串类型为原生
String
修改CSV读取代码,新增stringtype=String参数:
csv_reader = CSV.File(file_name; header=[:Date, :Home, :H_pts], delim="\t", dateformat="e u d yyyy", stringtype=String)
- 方案二:插入数据时显式做类型转换
执行插入操作时将row.Home转换为原生String:
DBInterface.execute(insert_into_games, [String(row.Home)])
- 方案三:升级MySQL.jl到最新正式版,最新版本已经完成了对InlineStrings系列定长字符串类型的适配,无需修改业务代码即可正常运行。
内容的提问来源于stack exchange,提问作者shakeshuck
相关产品推荐
相关产品推荐

