在MySQL数据库使用DbMaintenance.AddColumn添加列时, 底层生成sql语句逻辑有问题 返回
此处代码中先将columnInfo.DataType缓存至dataType字段
但后续执行GetSize(columnInfo)中,在MySQL的重写逻辑中
若字段的Length大于4000则会更新columnInfo.DataType属性为"longtext"并返回空字符串
但后续在执行 string.Format(this.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity) 的时候传入是此前缓存的dataType, columnInfo.DataType的更新实际上并未使用, 导致最终生成的sql字符串中类型文本是没有长度的 "varchar" ,引起数据库执行报错
其它地方的类似实现都是先执行GetSize再缓存DataType
热忱回答(2)
-
fate sta VIP0
2周前没看懂说的什么,说功能,不要讲源码。
0 回复 -
飞羽流星 VIP0
2周前简单来说:
MySQL连接下
columnInfo.DbType="varchar";columnInfo.Length > 4000;
执行 DbMaintenance.AddColumn(columnInfo) 会报错
因为会生成类似下面这样的SQL语句, 因为varchar没有长度信息, 执行就报错了alter table mytable add column newcolumn varchar default null
上面一大串就是告诉你问题出在源码哪里
0 回复