Apa perbedaan antara CharField()
dan TextField()
di Django? The dokumentasi mengatakan bahwa CharField()
harus digunakan untuk string yang lebih kecil dan TextField()
harus digunakan untuk string yang lebih besar. Oke, tapi di mana garis yang ditarik antara "kecil" dan "besar"? Apa yang terjadi di bawah tenda di sini yang membuat ini menjadi masalah?
302
TextField
secara default dapat memengaruhi portabilitas aplikasi Anda. Mungkin tidak ada hit kinerja pada Postgres, tetapi Oracle akan menyimpannya sebagaiCLOB
yang memiliki beberapa gangguan, seperti tidak dapat menggunakan bidang dalam pernyataan WHERE. Hanya sesuatu yang perlu dipertimbangkan.CharField
tidak bolehmax_length
lebih dari 2000, atau ia mengeluarkanORA-00910: specified length too long for its datatype
kesalahan.Dalam beberapa kasus ini terkait dengan bagaimana bidang tersebut digunakan. Dalam beberapa mesin DB perbedaan bidang menentukan bagaimana (dan jika) Anda mencari teks di lapangan. CharFields biasanya digunakan untuk hal-hal yang dapat dicari, seperti jika Anda ingin mencari "satu" di string "satu tambah dua". Karena dawai lebih pendek, mereka kurang memakan waktu untuk mesin untuk mencari. TextFields biasanya tidak dimaksudkan untuk dicari (seperti mungkin badan blog) tetapi dimaksudkan untuk menampung potongan teks yang besar. Sekarang sebagian besar tergantung pada DB Engine dan seperti pada Postgres, itu tidak masalah.
Bahkan jika itu tidak masalah, jika Anda menggunakan ModelForms Anda mendapatkan berbagai jenis bidang pengeditan dalam formulir. ModelForm akan menghasilkan bentuk HTML seukuran satu baris teks untuk CharField dan multiline untuk TextField.
sumber
Untuk mis.,. 2 bidang ditambahkan dalam model seperti di bawah ini ..
Di bawah ini adalah kueri mysql yang dijalankan ketika migrasi diterapkan.
untuk
TextField
(deskripsi) bidang didefinisikan sebagai alongtext
Panjang maksimum
TextField
MySQL adalah 4GB menurut string-type-overview .untuk
CharField
(judul), max_length (wajib) didefinisikan sebagaivarchar(64)
sumber
Avoid using null on string-based fields such as CharField and TextField
:: docs.djangoproject.com/en/2.0/ref/models/fields/#null jadi sebaiknya disimpannull=False
.CharField
memiliki255
karakter max_length sementaraTextField
dapat menampung lebih dari255
karakter. GunakanTextField
saat Anda memiliki string besar sebagai input. Adalah baik untuk mengetahui bahwa ketikamax_length
parameter dilewatkan ke dalamTextField
itu melewati validasi panjang keTextArea
widget.sumber
VARCHAR
tipe kolommax_length
dibatasi hingga 255 karakter jika Anda menggunakan unique = True untuk bidang tersebut. " (Penekanan saya.)Saya punya masalah aneh dan mengerti perbedaan aneh yang tidak menyenangkan: ketika saya mendapatkan URL dari pengguna sebagai CharField dan kemudian menggunakannya dalam html tag oleh href, itu menambahkan url ke url saya dan itu bukan yang saya inginkan. Tetapi ketika saya melakukannya dengan Textfield hanya melewati URL yang dimasukkan pengguna. lihat ini: alamat situs web saya:
http://myweb.com
EnterField entery:
http://some-address.com
saat mengkliknya:
http://myweb.comhttp://some-address.com
Enter TextField:
http://some-address.com
saat mengkliknya:
http://some-address.com
Saya harus menyebutkan bahwa URL disimpan persis sama dalam DB dengan dua cara tetapi saya tidak tahu mengapa hasilnya berbeda ketika mengkliknya
sumber