2010-06-10 20 views
6

Permitir valores NULL en una columna normalmente se realiza para permitir la ausencia de un valor que se representará. Al usar NVARCHAR, ya existe la posibilidad de tener una cadena vacía, sin configurar la columna en NULL. En la mayoría de los casos, no puedo ver una diferencia semántica entre NVARCHAR con una cadena vacía y un valor de NULL para dicha columna.(NO) NULO para columnas NVARCHAR

Ajuste de la columna como NOT NULL me salva de tener que lidiar con la posibilidad de NULL valores en el código y se siente mejor no tener a diferentes representaciones de "ningún valor" (NULL o una cadena vacía).

¿Podré encontrarme con algún otro problema configurando mis columnas NVARCHAR en ? ¿Actuación? Tamaño de almacenamiento? ¿Algo que haya pasado por alto en el uso de los valores en el código del cliente?

+1

Bueno, Oracle está de acuerdo con usted y trata las cadenas vacías como nulas. –

Respuesta

3

indica que el valor en la columna no se encuentra/no es aplicable. Una cadena en blanco es diferente porque ese es un valor real. Un NULL técnicamente no tiene ningún tipo de datos donde una cadena en blanco, en este caso, es nvarchar.

No puedo ver ningún problema con tener valores predeterminados en lugar de valores NULL.

De hecho, probablemente sería útil, ya que no tiene que preocuparse de vacaciones para NULL valores en cualquiera de sus preguntas

por ejemplo

Select Sum(TotalPrice) as 'TotalPrice' From myTable Where CountOfItems > 10 

mucho más fácil que

Select Sum(IsNull(TotalPrice,0)) as 'TotalPrice' From myTable Where IsNull(CountOfItems,0) > 10 

Debe usar las restricciones predeterminadas en su DDL para asegurarse de que no aparezcan los NULL deshonestos en sus datos.

+3

-1 Si 'TotalPrice' es' NULL', entonces no se incluirá en el agregado de todos modos. Si 'CountOfItems' es' NULL', entonces no coincidirá con el predicado '> 10' de todos modos, por lo que ambos son redundantes y el segundo solo hace que la expresión no se pueda borrar. ¿Qué ocurre si utiliza 'AVG' en lugar de' SUM'? Ahora sus valores ficticios harán que el resultado sea incorrecto. –

3

El concepto del valor NULO es una fuente común de confusión. NULL es no lo mismo que una cadena vacía, o un valor de cero.

Conceptualmente, NULL significa "un valor desconocido que falta" y se trata de manera diferente a otros valores. Por ejemplo, para probar NULL, no puede usar los operadores de comparación aritmética como =, <, o <>.

Si tiene columnas que pueden contener "un valor desconocido que falta", debe configurarlas para que acepten NULL. Por otro lado, una cadena vacía simplemente significa que el valor es conocido, pero está vacío.

Por ejemplo: si un campo "Segundo nombre" en una tabla de "Usuarios" está establecido en NULO, significa que no se conoce el segundo nombre de ese usuario. El usuario puede o no tener un segundo nombre. Sin embargo, si el campo "Segundo nombre" está configurado en una cadena vacía, esto debería significar que se sabe que el usuario no tiene segundo nombre.

+0

Sí y no, depende de la aplicación. Hay muchos casos de uso donde encontrará ciertos campos para los cuales cadena vacía y cadena nula no tienen/necesitan significados separados. – Chalky

0

En todo caso, diría que será más fácil usar la tabla si no permite valores NULL, ya que no tendrá que buscar NULL en todas partes en el código, así que solo configuré una columna para permitir NULLs si necesito manejar valores desconocidos en lugar de vacíos.

0

Lo que dijo ho1. Pero no sería aconsejable definir una columna NOT NULL y luego tener un valor especial para 'Desconocido'.

Cuestiones relacionadas