2011-05-11 151 views
0

我试图在MySQL中使用可为空值的2字符字段。当我运行我的manage.py syncdb命令时,它会将我的数据加载到MySQL表中,但会产生以下错误:Django将字符串“(NULL)”插入到MySQL字段中,而不是NULL

文件“C:\ Python27 \ lib \ site-packages \ MySQLdb \ connections.py”,第36行,在defaulterrorhandler引发错误类,errorvalue DatabaseError:(1406,“数据太长,列'state_province'在第1行')

我发现问题是Django插入到表中的字符串”(NULL)“而不是SQL的NULL值。

在考虑中的字段是“州(省)”,这是空=真,空白=真模型中的定义,具有2

这里的长度是数据的样本集:

- model: myapp.Address 
    pk: 53 
    fields: 
     street_address: "71 South St" 
     city: cityname 
     state_province: 
     zip_code: 25455 
     countryID: 199 
     time_zone: -6 
- model: myapp.Address 
    pk: 54 
    fields: 
     street_address: "123 lake street" 
     city: Townname 
     state_province: NH 
     zip_code: 12345 
     countryID: 199 
     time_zone: -5 

编辑:我忘了链接,这个问题实际上到底发生了什么,但我不知道怎么纠正在Django这种行为,或从哪里开始: Inserting null into char(1)

回答

0

嗯,这可能听起来刺耳,但这是一个核心和非常高的公关Django内部工作的一部分。如果它是Django中的一个bug,它将被记录下来,更重要的是已经被修复了。

由于您遇到了manage.py而不是您自己的代码的这个错误,但我最好的猜测是该字段实际上并未设置为允许MySQL表上的NULL,并且Django正在尝试补偿最佳它可以。

检查您的MySQL表,并确保state_province列允许NULL。

+0

使用SQLyog的看到的列,在MySQL字段的定义是: 州(省)[VARCHAR(2),NULL] 与之相对的街道地址: STREET_ADDRESS [VARCHAR(128),NOTNULL] – 2011-05-11 18:08:41

+0

我刚做了一个数据转储,它看起来像被正确地转储为空,尽管除非长度为6个字符,否则我不能有一个字段为空的事实仍然是一个问题。 – 2011-05-11 18:11:15

相关问题