2012-01-07 32 views
5

我正在從測試SQLite數據庫遷移到PostgreSQL數據庫。Django和PostgreSQL - 值類型字符變化太長(512)

我有一個插入到數據庫中的示例對象,它在SQLite上工作,但在PostgreSQL中給我一個錯誤。

代碼片段:

car = CarItem.objects.create(
    user = motor_trend, 
    name = 'Camaro 2010', 
    category = cars, 
    condition = 'Used', 
    price = '28,547.00', 
    production_year = '2010', 
    color_interior = 'Black', 
    color_exterior = 'Inferno Orange Metallic', 
    reference = 'PRC17288', 
    location_of_creation = 'Undisclosed', 
    location_current = 'Columbus, OH, USA', 
    description = 'GORGEOUS ORANGE SS!!', 
) 
car.save() 

我得到一個:

DatabaseError at /create/ 
value too long for type character varying(512) 

Traceback 
(...) 
    description = 'GORGEOUS ORANGE SS!!', 
(...) 

我的模型的描述字段512最大字符長度:

description = models.CharField(max_length=512,default='') 

但有沒有辦法,該字符串超過512字節。

我已閱讀以前的帖子關於這個錯誤,一個引用編碼。似乎並非如此。

我在Webfaction上託管。我創建了一個使用utf-8編碼的數據庫,並開始使用syncdb。 Syncdb的工作完美,但現在這個對象插入失敗。

有人可以提供一些意見嗎?謝謝。

回答

4

Django documentation一些挖後:

字符字段

所存放的VARCHAR列類型的任何領域都有自己的 MAX_LENGTH 限制爲255個字符如果您正在使用獨特=真 爲領域。

強調我的。你是否有unique=True的領域? 這是一個Django限制,PostgreSQL不會介意。您可能想切換到數據類型text。 Django說法中的TextField


舊觀念:

userreserved word in PostgreSQL任何SQL標準。不要將其用作列名稱。

可能使用它,如果你把它用雙引號引起來,但遠離那種愚蠢的做法。只是不要使用保留字作爲標識符。永遠。

也...

user = motor_trend, 
name = 'Camaro 2010', 
category = cars, 

任何特別的原因motor_trendcars中沒有報價,如其他值?外鍵,如@Ignacio評論?

+0

因爲它們是外鍵。 Django的ORM可能會正確引用字段名稱。 – 2012-01-07 05:57:22

+0

是的,這些是先前定義的Django變量,一些字符串和其他對象。 但是,這與描述問題有關嗎?事實上,我有一個用戶字段導致描述問題? – 2012-01-07 14:38:28

+0

@VascoPatricio:與問題沒有明顯聯繫,沒有。由於沒有什麼明顯的我正在尋找任何可疑的東西。我深入瞭解手冊,並認爲我現在找到了一些東西。修改我的答案,看看。 – 2012-01-07 17:54:30

相關問題