Tengo un formulario en un sitio web que tiene muchos campos diferentes. Algunos de los campos son opcionales, mientras que algunos son obligatorios. En mi DB tengo una tabla que contiene todos estos valores, ¿es una mejor práctica insertar un valor NULL o una cadena vacía en las columnas DB donde el usuario no puso ningún dato?MySQL, ¿es mejor insertar cadena NULL o vacía?
Respuesta
Al usar NULL
puede distinguir entre "poner datos sin datos" y "poner datos vacíos".
Algunos más diferencias:
Un
LENGTH
deNULL
esNULL
, unLENGTH
de una cadena vacía es0
.NULL
s se ordenan antes de las cadenas vacías.COUNT(message)
contará cadenas vacías pero noNULL
sPuede buscar una cadena vacía usando una variable ligada pero no para un
NULL
. Esta consulta:SELECT * FROM mytable WHERE mytext = ?
nunca va a coincidir con un
NULL
enmytext
, cualquier valor que se pasa desde el cliente. Para que coincida conNULL
s, usted tiene que utilizar otro tipo de consulta:SELECT * FROM mytable WHERE mytext IS NULL
no sé cuál sería la mejor práctica aquí, pero en general podría errar en favor de la hipótesis nula a menos que desee nula para significar algo diferente de cadena vacía, y la entrada del usuario coincide con la definición de cadena vacía.
Tenga en cuenta que digo que USTED necesita definir cómo desea que sean diferentes. A veces tiene sentido tenerlos diferentes, a veces no es así. Si no, simplemente elija uno y quédese con él. Como dije, tiendo a favorecer al NULL la mayor parte del tiempo.
Ah, y tenga en cuenta que si la columna es nula, es menos probable que el registro aparezca en prácticamente cualquier consulta que seleccione (tiene una cláusula where, en términos SQL) basada en esa columna, a menos que la selección para una columna nula, por supuesto.
... Y ahora que veo la respuesta por encima de mí, creo que es seguro decir que la diferenciación habitual que te interesaría no es la de los datos en comparación con los datos vacíos. :-) –
Una cosa a considerar, si alguna vez planea cambiar las bases de datos, es Oracle does not support empty strings. Se convierten a NULL automáticamente y no puede consultarlos usando cláusulas como WHERE somefield = ''
.
Esto sonaba increíblemente sospechoso para mí, incluso en su enlace, así que lo intenté. Campo nulo, establecido en '', Oracle lo ignora. Informa longitud como nulo en lugar de 0. Eso es tan malo. Tiene que haber alguna forma de evitar esto. Creo que publicaré esto como otra pregunta. –
'Steve B.': vea esta pregunta: http://stackoverflow.com/questions/1171196/difference-between-varchar-and-varchar2 – Quassnoi
Gracias por la referencia, aunque todavía no entiendo el razonamiento. Publicado como http://stackoverflow.com/questions/1268177/oracle-not-distinguishing-between-nulls-and-empty-strings –
Una cosa a tener en cuenta es que NULL puede hacer que sus rutas de codificación sean mucho más difíciles. En Python, por ejemplo, la mayoría de los adaptadores de bases de datos/ORM se asignan NULL
a None
.
Así las cosas como: "¡Hola, Ninguno Joe Doe"
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
podría dar lugar a Para evitarlo necesita algo como este código:
if databaserow.title:
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
else:
print "Hello, %(firstname) %(lastname)!" % databaserow
Lo que puede hacer las cosas mucho más complejas.
En mi opinión, abusar de su base de datos para "corregir" errores en su código o en el marco es una (muy) mala práctica de codificación. Cuando no hay datos, solo debe insertar NULL y ser consistente al usar eso. De lo contrario, debe usar declaraciones como: if (myString == null || myString = ""). Cuando un objeto no está configurado o definido en su código, también está usando NULL en lugar de algún tipo de "marcador de posición" (que en mi opinión es una cadena vacía). – Gertjan
Depende mucho de su idioma de elección. En Python "if not myString:" prueba None y "". Probablemente principalmente un problema cultural. La "mala práctica" de Java Guys es la elegancia de la persona dinámica. – max
Es mejor insertar NULL
para mantener la coherencia en su base de datos en MySQL. Las claves externas se pueden almacenar como NULL
pero NO como cadenas vacías.
Tendrá problemas con cadena vacía en las restricciones. Puede que tenga que insertar un registro falso con cadena vacía única para satisfacer una restricción de clave externa. Mala práctica, supongo.
Consulte también: Can a foreign key be NULL and/or duplicate?
No sé sobre el rendimiento. Pero en términos de calidad de datos, null es malo.
Null le proporciona el tipo maybe
, lo que obliga a escribir el tipo de tiempo de ejecución comprobar como: something = a.b.c.d.something if exist?(a) && exist?(a.b) && exist?(a.b.c) && exist?(a.b.c.d) && exist?(a.b.c.d.something)
.
Este problema podría ser mitigado si no está utilizando los formatos json/hash/array.
- 1. ¿Puedo insertar una cadena vacía en un campo NOT NULL?
- 2. NULL TextField o cadena vacía en el modelo Django?
- 3. '...! = Null' o 'null! = ....' mejor rendimiento?
- 4. La cadena es nula o está vacía
- 5. Zend: Cómo insertar valores NULL en MySQL
- 6. ¿Cuál representa nulo? undef o cadena vacía
- 7. MySQL y PHP: inserte una cadena NULL en lugar de una cadena vacía
- 8. C# XmlElement: SelectSingleNode devuelve null para cadena vacía?
- 9. ¿El XML de cadena vacía es válido?
- 10. ListView ColumnHeader.Name es cadena vacía
- 11. ¿Por qué Oracle 9i trata una cadena vacía como NULL?
- 12. JAXB Mariscal cadena vacía en Null A nivel mundial
- 13. Cadena vacía insertando un cero, no un
- 14. ¿Debo usar NULL o una cadena vacía para no representar datos en la columna de la tabla?
- 15. ¿Debe comprobar null & length o hay una forma más corta de verificar una cadena no vacía?
- 16. PHP MYSQL Insertar/Actualizar
- 17. MySQL Enum siempre contiene '' (cadena vacía) en posibilidades
- 18. regex permitir solo números o cadena vacía
- 19. (a! = Null) o (null! = A)
- 20. Problema al insertar cadena o NULL en la base de datos de SQL Server
- 21. MySQL Query Browser ¿Cómo ingreso NULL?
- 22. Oracle 10g: la columna está en blanco, pero no es nula o es una cadena vacía
- 23. Cadena vacía de JSON
- 24. ¿Cómo debo probar los parámetros de cadena vacía y/o vacía en un método?
- 25. IOS: verifique si una cadena es una cadena vacía
- 26. ¿Cuál es la mejor manera de probar una cadena vacía con jquery-out-of-the-box?
- 27. Insertar número secuencial en MySQL
- 28. COALESCE vs IS NOT NULL rendimiento en la comprobación de cadena vacía
- 29. style.backgroundColor es una cadena vacía en JavaScript
- 30. MySQL LOAD_FILE devuelva NULL
pero ¿cuál crees que es más rápido? 0 o NULL o "" –
@aadravid: no hay diferencia. – Quassnoi
en InnoDB NULL ocupa menos espacio –