¿Cuál es la diferencia entre CharField()
y TextField()
en Django? La documentación dice que CharField()
debe usarse para cadenas más pequeñas y TextField()
debe usarse para cadenas más grandes. De acuerdo, pero ¿dónde se dibuja la línea entre "pequeño" y "grande"? ¿Qué está pasando debajo del capó aquí que hace que este sea el caso?
302
TextField
predeterminado puede afectar la portabilidad de su aplicación. Es posible que no haya un impacto en el rendimiento en Postgres, pero Oracle lo almacenará como algoCLOB
que tiene algunas molestias, como no poder usar el campo en las declaraciones WHERE. Solo algo a considerar.CharField
no puede tenermax_length
más de 2000, o emite unORA-00910: specified length too long for its datatype
error.En algunos casos está vinculado a cómo se usa el campo. En algunos motores de base de datos, las diferencias de campo determinan cómo (y si) busca texto en el campo. Los CharFields se usan generalmente para cosas que se pueden buscar, como si desea buscar "uno" en la cadena "uno más dos". Como las cadenas son más cortas, el motor necesita menos tiempo para buscar. Los campos de texto generalmente no están destinados a ser buscados (como tal vez el cuerpo de un blog) sino que están destinados a contener grandes fragmentos de texto. Ahora, la mayor parte de esto depende del motor DB y, como en Postgres, no importa.
Incluso si no importa, si usa ModelForms obtendrá un tipo diferente de campo de edición en el formulario. ModelForm generará un formulario HTML del tamaño de una línea de texto para un CharField y multilínea para un TextField.
fuente
Por ejemplo,. Se agregan 2 campos en un modelo como el siguiente.
A continuación se muestran las consultas mysql ejecutadas cuando se aplican las migraciones.
para
TextField
(descripción) el campo se define como unlongtext
La longitud máxima
TextField
de MySQL es de 4 GB de acuerdo con la descripción general del tipo de cadena .para
CharField
(título) la longitud máxima (requerida) se define comovarchar(64)
fuente
Avoid using null on string-based fields such as CharField and TextField
:: docs.djangoproject.com/en/2.0/ref/models/fields/#null, por lo que es mejor mantenerlonull=False
.CharField
tiene una longitud máxima de255
caracteres, mientras queTextField
puede contener más de255
caracteres. ÚseloTextField
cuando tenga una cadena grande como entrada. Es bueno saber que cuando elmax_length
parámetro se pasa aTextField
, pasa la validación de longitud alTextArea
widget.fuente
VARCHAR
tipos de columna tienen unmax_length
límite de 255 caracteres si está usando unique = True para el campo " (Mi énfasis).Tuve un problema extraño y entendí una diferencia extraña desagradable: cuando obtengo una URL del usuario como CharField y luego la uso en html una etiqueta de href, agrega esa url a mi url y eso no es lo que quiero. Pero cuando lo hago por Textfield pasa solo la URL que ingresó el usuario. mira estos: mi dirección del sitio web:
http://myweb.com
CharField entery:
http://some-address.com
Al hacer clic en él:
http://myweb.comhttp://some-address.com
TextField entery:
http://some-address.com
Al hacer clic en él:
http://some-address.com
Debo mencionar que la URL se guarda exactamente igual en la base de datos de dos maneras, pero no sé por qué el resultado es diferente al hacer clic en ellas
fuente