【发布时间】:2025-12-22 06:55:14
【问题描述】:
我正在使用 Microsoft SQL Server,ODBC Driver 13 for SQL Server with Django 2.0.1
这实际上发生在我所有的十进制字段中,我希望我遗漏了一些简单的东西。
我已在我的模型中声明:
Overhead = models.DecimalField(max_digits=6, decimal_places=4, db_column='overhead')
用它制作了一个模型表单,它实际上验证了有太多数字(例如:100.0000),并且当设置为比声明的数量少一(例如:9.0000)时正确更新。与 max_digits 匹配的任何位数都会导致截断错误:
String data, right truncation: length 14 buffer 12
如果我用 DecimalField 声明如下重复相同的情况:
models.DecimalField(max_digits=9, decimal_places=2, db_column='subtotal')
我从数据库驱动程序 (22001) 得到相同的错误类型,溢出量略有不同:
String data, right truncation: length 26 buffer 24
为日志中的更新语句生成的 SQL 可以在 SQL Server 的 SQL 编辑器中复制/粘贴并使用完全相同的参数,并且可以愉快地更新记录。我一直在想,在 Django 编译 SQL 和执行它的数据库驱动程序之间发生了一些事情,但我不确定我什至会寻找什么,因此感谢任何帮助。
【问题讨论】:
-
可能与 GitHub 问题 here 重复。
-
100% 正确,pyodbc 升级到 4.0.23 解决了这个问题。
标签: sql-server django pyodbc