Django中CharField()
和TextField()
和有什麼不一樣? documentation表示CharField()
應該用於較小的字符串,而TextField()
應該用於較大的字符串。好的,但「小」和「大」之間的界線在哪裏?這種情況下發生了什麼?Django CharField vs TextField
回答
這是RDBMS的varchar
(或類似)之間的區別 - 通常用最大長度指定,並且在性能或存儲方面可能更高效 - 以及text
(或類似)類型 - 通常僅限於硬編碼的實現限制(不是數據庫模式)。 PostgreSQL 9,具體說,"There is no performance difference among these three types",但是AFAIK有一些不同之處,例如, MySQL,所以這是要記住的事情。
一個很好的經驗法則是,如果需要限制最大長度,則使用CharField
,否則爲TextField
。
這並不是真正的Django特定的。
在某些情況下,它與使用該字段的方式有關。在某些數據庫引擎中,字段差異決定了如何(以及如果)在字段中搜索文本。 CharFields通常用於可搜索的事物,例如,如果要在字符串「one plus two」中搜索「one」。由於字符串越短,發動機搜索的時間越少。 TextFields通常不是要通過搜索(比如也許是博客的主體),而是要保存大量的文本。現在大部分依賴於數據庫引擎,就像在Postgres中一樣,這並不重要。
即使沒關係,如果使用ModelForms,您會在窗體中獲得不同類型的編輯字段。 ModelForm將生成一個HTML格式,其大小爲CharField的一行文本和TextField的多行格式。
例如,在下面的模型中添加了2個字段..
description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)
下面是在應用遷移時執行的mysql查詢。
爲TextField
(介紹)的字段被定義爲一個longtext
ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;
爲CharField
(標題)的MAX_LENGTH(必需)被定義爲varchar(64)
ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
CharField爲255個字符MAX_LENGTH而TextField可以容納超過255個字符。如果有大字符串作爲輸入,請使用TextField。它很好地知道,當max_length參數傳遞給TextField時,它將長度驗證傳遞給TextArea小部件。
- 1. Django:將CharField轉換爲TextField且數據完好
- 2. Django在窗體中顯示CharField爲TextField錯誤
- 3. Django CharField限制
- 4. Django的模型Charfield
- 5. Django的CharField定義
- 6. CharField max_length 2^n vs 2^n-1
- 7. 如何從CharField在Django
- 8. Django的CharField至字符串
- 9. Django CharField,選擇和遷移
- 10. django Charfield適合主鍵?
- 11. Django Forms:En- /動態禁用Charfield
- 12. Django charfield組合默認值
- 13. Django CharField存儲換行
- 14. 轉換charfield串的Django
- 15. 沒有空字符串的Django CharField
- 16. Charfield必須與另一個Charfield Django的表單驗證匹配
- 17. Flash TextField vs Starling TextFiled
- 18. Django - 管理:list_display TextField
- 19. 模型中Django Textfield的合適性
- 20. Django的formfield_overrides與MAX_LENGTH在TextField中
- 21. Django URL基於charfield與空格?
- 22. Mongo使用Django的max_length問題CharField
- 23. 的Django模型CharField拋出INT()錯誤()
- 24. django模型不區分大小寫Charfield
- 25. Django的查詢集計算子在charField
- 26. Django模型:CharField與選擇屬性
- 27. Django South - 將CharField更改爲ForeignKey
- 28. 沒有最大長度的Django CharField
- 29. (Django)修改charField中的空格
- 30. 輸出Django Charfield作爲響應Bootstrap textarea
反過來說,如果你使用CharField,那麼你*必須*有最大長度 –
我發現默認情況下使用'TextField'會影響你的應用程序的可移植性。 Postgres可能沒有性能問題,但Oracle會將它存儲爲一個'CLOB',它有一些煩惱,就像不能在WHERE語句中使用該字段。只是需要考慮。 – Rob
還應該考慮在Oracle中'CharField'不能具有大於2000的'max_length',或者它會發出一個'ORA-00910:指定的長度太長的數據類型'錯誤。 – Dinei