Django将字符串“(NULL)”插入到MySQL字段中,而不是NULL

时间:2011-05-11 15:38:14

标签: mysql django null

我正在尝试使用可以为MySQL的地址表为空的2字符字段。当我运行manage.py syncdb命令时,它会将我的数据加载到MySQL表中,但会产生错误:

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

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

有问题的字段是“state_province”,在模型定义中为null = True,blank = True,长度为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)

1 个答案:

答案 0 :(得分:0)

嗯,这可能听起来很刺耳,但这是Django内部运作的核心和高调部分。如果它是Django中的一个错误,它将被充分记录,更重要的是,已经修复了。

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

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