Data Truncated Errors

Published on May 6, 2009, 10:03 a.m.

django mysql python web

I recently ran into some of the Data truncated for column ... errors in my django apps. After a little digging, I've discovered that my particular problem lie in the structure of the underlying MySQL tables. Particularly with varchar columns.

I have a model that contains a FileField:
class MyModel(models.Model):
file = models.FileField(upload_to="files/%Y/%m/%d")

Note that the MySQL table generated by this model will look something like the following:
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | | PRI | NULL | auto_increment |
| file | varchar(100) | | | | |

See the varchar(100)! If you're users are uploading files with long names (mine are!), this may not be enough! Note that my model also has an upload_to that includes a year, month, and day. That's already 17 characters...

So when someone tries to upload a file named:

It will get pre-pended with '/files/2009/05/06/', and what gets stored in your table?

That's 112 characters... and it won't work!

The solution?
You could alter your table so that the file column is a varchar(255)... which may help.
alter table myapp_mymodel modify file varchar(255);

OR, use shorter filenames!

Good Luck!
comments powered by Disqus