2015-07-10 75 views
1

升級到Django 1.8.3後,我需要從使用django_extensions.db.fields.UUIDField更改爲新的django.db.models.UUIDFieldDjango UUIDField從varchar(36)截斷爲char(32)

問題是,舊的被定義爲帶連字符的varchar(36),新的是沒有連字符的char(32)。 我絕對看到沒有這些連字符的大小好處。

我放棄了,正如我擔心的那樣,列中的數據會被截斷。

當我檢查該字段的定義,它被初始化爲:

def __init__(self, verbose_name=None, **kwargs): 
    kwargs['max_length'] = 32 
    super(UUIDField, self).__init__(verbose_name, **kwargs) 

這個定義塊MAX_LENGTH的任何覆蓋。

當然,我可以更新每一個UUIDFields我必須刪除連字符,但這是一個很長的過程,因爲我的表是相當大的。 有關信息,這是我必須要運行該類型的查詢:

UPDATE myTable 
SET uuid_field = REPLACE(uuid_field, '-', ''); 

所以我的問題是,你有比運行一個巨大的更新與UUIDFields每個表的每一行任何更好的主意?

+0

我認爲你可以覆蓋'UUIDField'並將最大長度設置爲36. –

+0

不,我不能因爲UUIDField的定義:'kwargs ['max_length'] = 32'。 – Seb

回答

1

好吧,更新數據庫中的每個UUID字段太痛苦了,我正在重新實現類似於舊的django_extensions.db.fields.UUIDField的東西。

Django的第一個目標是Postgres,它有自己的UUID字段類型(不帶連字符),但MySQL不。

如果你正在創建一個新的字段,Django的新UUIDField工作的很好,但如果你已經有了數據,這是一個痛苦。