我正在尝试使用可以为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)
答案 0 :(得分:0)
嗯,这可能听起来很刺耳,但这是Django内部运作的核心和高调部分。如果它是Django中的一个错误,它将被充分记录,更重要的是,已经修复了。
由于您在使用manage.py而不是您自己的代码时遇到此错误,我最好的猜测是该字段实际上并未设置为在MySQL表上允许NULL,而Django正在尝试补偿它最好的可以。
检查您的MySQL表并确保state_province
列上允许NULL。