2012-02-05 30 views
8

Estoy creando un DB MySQL que se compone de conjuntos de datos semanales, que se remontan a la última década. Hay algunos puntos de datos que existen para los registros recientes, pero que no fueron rastreados en algunos de los conjuntos de datos anteriores. Todos los campos en cuestión contienen valores enteros, y '0' es un valor perfectamente válido (y frecuente) para los registros que registraron los puntos de datos. Necesito poder distinguir entre un valor de cero y datos inexistentes. Por lo tanto, necesito averiguar si es posible almacenar un NULL que no está representado como un '0' (léase: BLANK CELL) para un tipo INT. Sin embargo, los valores NULL pasados ​​al DB se representan como '0' (al menos, están en phpMyAdmin), ¿hay alguna forma de cambiar esto?Puede el tipo INT de MySQL no ser cero NULO

Gracias por su ayuda.

+0

Creo que debería permitir que la columna contenga valores nulos. Pero la respuesta corta es: sí, las columnas int pueden tener valores NULL. –

Respuesta

11

Puede establecer el valor en NULO. INSERT INTO table (INT_COLUMN) VALUES (NULL) es SQL válido (con INT_COLUMN es una columna nullable int).

+0

He intentado pasar el valor como "" en blanco y como NULO, y en ambas situaciones se muestra como "0" (al menos cuando navegas en PHPMyAdmin) ... – dgeare

+0

¿Ha establecido el valor predeterminado de la columna en 0? Pega la definición de tu tabla aquí. –

+0

mejore su respuesta agregando la definición de 'nullable' –

2

Sí, asegúrese de que su tabla esté diseñada para permitir valores NULOS en la columna en cuestión. Vea el ejemplo muy básico a continuación:

DROP TABLE IF EXISTS testTable; 
CREATE TABLE `testTable` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `data` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
; 

INSERT INTO testTable VALUES 
(NULL, 100), 
(NULL, 200), 
(NULL, NULL), 
(NULL, 400); 

SELECT * FROM testTable; 

El selecto tendrá el siguiente resultado:

+----+------+ 
| id | data | 
+----+------+ 
| 1 | 100 | 
| 2 | 200 | 
| 3 | NULL | 
| 4 | 400 | 
+----+------+ 
+0

Según los otros comentarios aquí, si pudiera mostrarnos el resultado de la declaración "show create table ", podríamos confirmar si su problema es o no con la definición de la tabla. – StudyOfCrying

8

La respuesta es "sí" - puede tener columnas int anulables. ¿Pero deberías?

Demasiado a menudo, null es mal utilizado e incomprendido. En bases de datos SQL, null significa "desconocido". En su situación, usar null es perfecto, entonces "sí, debería"

Hay casos en los que desea utilizar un valor específico para "nulo", por ejemplo -1 para una cantidad. Este enfoque es válido y se utiliza para simplificar el código de la aplicación y SQL, ya que se trata de valores nulos en las consultas es un dolor en el culo:

  • Tienes que utilizar la sintaxis especial "IS NULL"
  • Cualquier lista que contiene un nulo nunca coincidirán con nada, por ejemplo WHERE NAME IN (SELECT COL1 FROM SOMETABLE) nunca funcionará si alguno de los valores seleccionados es nulo
  • nulo no es igual a cualquier otra cosa, incluso otro nula
  • En estricta (por ejemplo java) código de aplicación, compruebe que un valor es nulo o obtendrá una NullPointerException. El uso de un valor real lo evita
+6

Usar valores "mágicos" puede ser bueno en ciertos casos, pero también puede ser un fastidio. Un 'SUM()' o 'AVG()' usual arrojará resultados incorrectos si tiene algunos valores '-1' allí. –

2

Nunca deja de sorprenderme cómo la gente responde preguntas sin leer realmente lo que se le pide. Estoy viendo lo mismo en phpMyAdmin. Permitir nulo está seleccionado y no está actualizando el registro, "IS NULL" o "" o null no funcionan. El valor INT de la columna está siendo impuesto por algo ... Por cierto, si alguien dice Javascript, no quiere una respuesta usando 'subrayado', JQuery o alguna otra extensión de Javascript, cualquier respuesta de este tipo debería ser un perfil automático de -10 !!!

+1

Entonces, parece que phpMyAdmin era el problema que estaba experimentando. Pude configurar los valores de la columna INT en NULL en la CLI de mysql pero no en phpMyAdmin. – Quadrivium

Cuestiones relacionadas