Si vous essayez de créer une colonne TEXT sur une table et que vous lui donnez une valeur par défaut dans MySQL, vous obtenez une erreur (sous Windows au moins). Je ne vois aucune raison pour laquelle une colonne de texte ne devrait pas avoir de valeur par défaut. Aucune explication n'est donnée par la documentation MySQL. Cela me semble illogique (et quelque peu frustrant, car je veux une valeur par défaut!). Quelqu'un sait pourquoi cela n'est pas autorisé?
mysql
default-value
Russ
la source
la source
TEXT
- ces colonnes ne peuvent pas avoir de valeur par défaut.VARCHAR
pouvez.Réponses:
Windows MySQL v5 génère une erreur, mais Linux et les autres versions ne déclenchent qu'un avertissement. Cela doit être corrigé. WTF?
Voir également une tentative pour résoudre ce problème en tant que bogue # 19498 dans MySQL Bugtracker:
Personnellement, je considère cela comme un bug. La recherche de "La colonne BLOB / TEXT ne peut pas avoir de valeur par défaut" renvoie environ 2 940 résultats sur Google. La plupart d'entre eux sont des rapports d'incompatibilités lors de la tentative d'installation de scripts DB fonctionnant sur un système mais pas sur d'autres.
Je rencontre le même problème maintenant sur une application Web que je modifie pour l'un de mes clients, initialement déployée sur Linux MySQL v5.0.83-log. J'utilise Windows MySQL v5.1.41. Même en essayant d'utiliser la dernière version de phpMyAdmin pour extraire la base de données, il ne signale pas de valeur par défaut pour la colonne de texte en question. Pourtant, lorsque j'essaie d'exécuter une insertion sur Windows (cela fonctionne bien sur le déploiement Linux), je reçois une erreur sans défaut sur la colonne ABC. J'essaie de recréer la table localement avec la valeur par défaut évidente (basée sur une sélection de valeurs uniques pour cette colonne) et finis par recevoir la colonne BLOB / TEXT si utile ne peut pas avoir de valeur par défaut .
Encore une fois, ne pas maintenir la compatibilité de base entre les plates-formes est inacceptable et constitue un bogue.
Comment désactiver le mode strict dans MySQL 5 (Windows):
Modifiez /my.ini et recherchez la ligne
Remplacez-le par
Redémarrez le service MySQL (en supposant qu'il s'agit de mysql5)
Si vous avez un accès root / admin, vous pourrez peut-être exécuter
la source
Sans aucune connaissance approfondie du moteur mySQL, je dirais que cela ressemble à une stratégie d'économie de mémoire. Je suppose que la raison est derrière ce paragraphe de la documentation :
Il semble que le préremplissage de ces types de colonnes entraînerait une utilisation de la mémoire et des pénalités de performances.
la source
Vous pouvez obtenir le même effet qu'une valeur par défaut en utilisant un déclencheur
la source
Comme question principale:
n'a toujours pas de réponse, j'ai fait une recherche rapide et j'ai trouvé un ajout relativement nouveau d'un développeur MySQL chez MySQL Bugs :
Ce n'est pas une réponse définitive, mais au moins un point de départ pour la question du pourquoi .
En attendant, je vais juste coder autour de lui et rendre la colonne Nullable ou attribuer explicitement une valeur (par défaut
''
) pour chacun àinsert
partir du code de l'application ...la source
"Prise en charge de DEFAULT dans les colonnes TEXT / BLOB" est une demande de fonctionnalité dans MySQL Bugtracker (bogue # 21532) .
Je vois que je ne suis pas le seul à souhaiter mettre une valeur par défaut dans une colonne TEXT. Je pense que cette fonctionnalité devrait être prise en charge dans une version ultérieure de MySQL.
Cela ne peut pas être corrigé dans la version 5.0 de MySQL, car apparemment, cela entraînerait une incompatibilité et une perte de données si quelqu'un essayait de transférer une base de données dans les deux sens entre les bases de données (actuelles) qui ne prennent pas en charge cette fonctionnalité et toutes les bases de données prenant en charge cette fonctionnalité.
la source
J'exécute normalement des sites sous Linux, mais je développe également sur une machine Windows locale. J'ai rencontré ce problème plusieurs fois et je viens de réparer les tables lorsque j'ai rencontré les problèmes. J'ai installé une application hier pour aider quelqu'un et, bien sûr, j'ai de nouveau rencontré le problème. J'ai donc décidé qu'il était temps de comprendre ce qui se passait - et j'ai trouvé ce fil. Je n'aime vraiment pas l'idée de changer le sql_mode du serveur vers un mode antérieur (par défaut), alors j'ai proposé une solution simple (je pense).
Cette solution obligerait bien sûr les développeurs à encapsuler leurs scripts de création de table pour compenser le problème MySQL sous Windows. Vous verrez des concepts similaires dans les fichiers de vidage. Une GRANDE mise en garde est que cela pourrait / causera des problèmes si le partitionnement est utilisé.
C'est à peu près ça.
la source
Pour Ubuntu 16.04:
Comment désactiver le mode strict dans MySQL 5.7:
Modifier le fichier /etc/mysql/mysql.conf.d/mysqld.cnf
Si la ligne ci-dessous existe dans mysql.cnf
Puis remplacez-le par
Autrement
Ajoutez simplement la ligne ci-dessous dans mysqld.cnf
Ce problème résolu.
la source