your you the that number have error corresponds code check mysql

mysql - you - ¿Cuál es el punto de "NOT NULL DEFAULT ''''"?



error number 1064 (7)

He visto esto en muchos campos en una base de datos de un proyecto en el que he estado trabajando, donde una columna se definirá como nula, pero tendrá una cadena vacía como predeterminada. ¿Cuál es el punto de hacer esto? Si permite una cadena vacía, ¿por qué no permitir que un campo sea nulo?


Además de lo que @Piskvor mencionó, esta práctica también está ahí para evitar algunas NullPointerExceptions potenciales en la lógica de la aplicación al rellenar beans / objetos, etc. después de leer desde DB


Hay una diferencia entre un valor nulo y una cadena vacía, al menos en SQL.

SELECT LENGTH(''tata''); 4 SELECT LENGTH(NULL); NULL SELECT LENGTH(''tata'')-LENGTH(''''); 4 SELECT LENGTH(''tata'')-LENGTH(NULL); NULL


La mayoría de los lenguajes de programación que interactúan con una base de datos no admiten de forma nativa un valor NULL que funciona de la misma forma que en una base de datos. Por ejemplo, en C #, null <> DbNull.Value. En VB, la mayoría de los tipos de datos no pueden hacer frente a la semántica nula, por ejemplo, no puede almacenar un nulo en una Fecha, un Int, etc. Al reducir el número de nulos que ven los programas del cliente, hay menos dolores de cabeza. En el caso de VB, el elemento cerrado que significa nulo para cadenas es Vacío, que es algo más cercano a no inicializado, no tiene el mismo significado que NULL en el sentido de "no conocido"


No permitimos nulos porque el acceso programático a un campo desde una base de datos con un valor DBnull causa una excepción, mientras que una cadena vacía tiene un valor y, por lo tanto, no produce errores.


Porque a veces, en algunos idiomas, una consulta de "selección" le daría la cadena NULL , y tendría que verificar si es una cadena real con contenido "NULL" o es realmente nula.

Con "" es más fácil (IMHO)


nulo y "" no son lo mismo, por lo que no hay contradicción aquí.

El significado semántico de nulo / "" depende del individuo y suele ser un problema "religioso". Para algunas personas en algunos esquemas, por supuesto, pueden ser iguales, pero no tienen que serlo. Por ejemplo, un "" podría significar ". Le pedí explícitamente al usuario una entrada, y optaron por no ingresar nada", mientras que un nulo podría significar "Ni siquiera pedí una entrada".


Los NULL tienen un comportamiento especial: comparar cualquier cosa con un NULL le devuelve un NULL , que es algo más que false o 0 . Significa "desconocido".

Por ejemplo, toma esta tabla:

user_id | gender ------------------ 1 | NULL 2 | ''M'' 3 | ''F'' 4 | ''F''

SELECT * FROM mytable WHERE gender = ''M'' regresará 1 fila, como se esperaba

SELECT * FROM mytable WHERE gender != ''M'' devolverá 2 filas, NO 3 filas.

SELECT * FROM mytable WHERE gender != ''M'' OR gender IS NULL devolverá las 3 filas esperadas.

Edición: para algunas aplicaciones, usar 0 (o, Dios no lo permita, otro "número mágico") en lugar de NULL ni siquiera es recomendable (las unidades o los valores exactos no son relevantes en este ejemplo):

Date | Temperature -------------------------- 2010-01-01 | 10 2010-01-02 | 4 2010-01-03 | 0 2010-01-04 | -22 2010-01-05 | -45 2010-01-06 | NULL 2010-01-07 | -34

Aquí, el valor NULL del 6 de enero significa "valor desconocido", tal vez porque la temperatura era tan baja que la sonda del termómetro dejó de responder. Sin embargo, es un significado completamente diferente al del 3 de enero, cuando la temperatura era 0 , es decir, 0 grados.

Además, como lo menciona @Bill Karwin, los NULL se comportan especialmente en funciones agregadas ( COUNT , SUM , AVG , etc.): el cálculo de AVG(Temperature) en los datos anteriores le daría -14.5 , ya que la fila NULL se ignora.