Si intenta crear una columna TEXTO en una tabla y le da un valor predeterminado en MySQL, obtendrá un error (al menos en Windows). No puedo ver ninguna razón por la cual una columna de texto no debe tener un valor predeterminado. La documentación de MySQL no proporciona ninguna explicación. Me parece ilógico (y algo frustrante, ¡ya que quiero un valor predeterminado!). Alguien sabe por qué esto no está permitido?
mysql
default-value
Russ
fuente
fuente
TEXT
esas columnas no pueden tener un valor predeterminado.VARCHAR
lata.Respuestas:
Windows MySQL v5 arroja un error, pero Linux y otras versiones solo generan una advertencia. Esto necesita ser arreglado. WTF?
También vea un intento de arreglar esto como el error # 19498 en el MySQL Bugtracker:
Personalmente, veo esto como un error. La búsqueda de "la columna BLOB / TEXT no puede tener un valor predeterminado" arroja unos 2.940 resultados en Google. La mayoría de ellos son informes de incompatibilidades al intentar instalar scripts de DB que funcionaron en un sistema pero no en otros.
Me encuentro con el mismo problema ahora en una aplicación web que estoy modificando para uno de mis clientes, originalmente implementado en Linux MySQL v5.0.83-log. Estoy ejecutando Windows MySQL v5.1.41. Incluso tratando de usar la última versión de phpMyAdmin para extraer la base de datos, no informa un valor predeterminado para la columna de texto en cuestión. Sin embargo, cuando intento ejecutar una inserción en Windows (que funciona bien en la implementación de Linux) recibo un error de no predeterminado en la columna ABC. Intento recrear la tabla localmente con el valor predeterminado obvio (basado en una selección de valores únicos para esa columna) y termino recibiendo la columna BLOB / TEXT tan útil que no puede tener un valor predeterminado .
Nuevamente, no mantener la compatibilidad básica entre plataformas es inaceptable y es un error.
Cómo deshabilitar el modo estricto en MySQL 5 (Windows):
Edite /my.ini y busque la línea
Reemplácelo con
Reinicie el servicio MySQL (suponiendo que es mysql5)
Si tiene acceso root / admin, es posible que pueda ejecutar
fuente
Sin ningún conocimiento profundo del motor mySQL, diría que esto suena como una estrategia de ahorro de memoria. Supongo que la razón está detrás de este párrafo de los documentos :
Parece que rellenar previamente estos tipos de columnas conduciría al uso de memoria y a penalizaciones de rendimiento.
fuente
Puede obtener el mismo efecto que un valor predeterminado utilizando un disparador
fuente
Como la pregunta principal:
todavía no se responde, hice una búsqueda rápida y encontré una adición relativamente nueva de un desarrollador de MySQL en MySQL Bugs :
Esta no es una respuesta definitiva, sino al menos un punto de partida para la pregunta de por qué .
Mientras tanto, solo codificaré alrededor y haré que la columna sea anulable o asignaré explícitamente un valor (predeterminado
''
) para cada unoinsert
desde el código de la aplicación ...fuente
"Soporte para DEFAULT en columnas TEXT / BLOB" es una solicitud de función en MySQL Bugtracker (Bug # 21532) .
Veo que no soy el único a quien le gustaría poner un valor predeterminado en una columna TEXTO. Creo que esta característica debería ser compatible con una versión posterior de MySQL.
Esto no se puede solucionar en la versión 5.0 de MySQL, porque aparentemente causaría incompatibilidad y daños si alguien intentara transferir una base de datos de ida y vuelta entre las bases de datos (actuales) que no admiten esa función y las bases de datos que sí admitieron esa característica
fuente
Normalmente ejecuto sitios en Linux, pero también desarrollo en una máquina local de Windows. Me he encontrado con este problema muchas veces y simplemente arreglé las tablas cuando encontré los problemas. Instalé una aplicación ayer para ayudar a alguien y, por supuesto, me encontré con el problema nuevamente. Entonces, decidí que era hora de descubrir qué estaba pasando, y encontré este hilo. Realmente no me gusta la idea de cambiar el sql_mode del servidor a un modo anterior (por defecto), así que se me ocurrió una solución simple (creo).
Por supuesto, esta solución requeriría que los desarrolladores envuelvan sus scripts de creación de tablas para compensar el problema de MySQL que se ejecuta en Windows. Verá conceptos similares en los archivos de volcado. Una gran advertencia es que esto podría / causará problemas si se usa la partición.
Eso es todo.
fuente
Para Ubuntu 16.04:
Cómo deshabilitar el modo estricto en MySQL 5.7:
Editar archivo /etc/mysql/mysql.conf.d/mysqld.cnf
Si debajo de la línea existe en mysql.cnf
Luego reemplácelo con
De otra manera
Simplemente agregue la siguiente línea en mysqld.cnf
Este problema resuelto.
fuente