La version Windows de MySQL v5 génère une erreur, mais Linux et les autres versions ne génèrent qu'un avertissement. Ceci doit être corrigé. WTF ?
Voir également une tentative de correction du bogue #19498 dans le MySQL Bugtracker :
Bryce Nesbitt le 4 avril 2008 à 16 h 36 :
Sous MS Windows, la règle "no DEFAULT" est une erreur, alors que sur les autres plateformes, elle est souvent un avertissement. Bien qu'il ne s'agisse pas d'un bogue, il est possible de se faire piéger par cette règle si vous écrivez du code sur une plate-forme indulgente et que vous l'exécutez ensuite sur une plate-forme stricte :
Personnellement, je considère cela comme un bug. La recherche de "BLOB/TEXT column can't have a default value" renvoie environ 2 940 résultats sur Google. La plupart d'entre eux sont des rapports d'incompatibilités en essayant d'installer des scripts de DB qui fonctionnaient sur un système mais pas sur d'autres.
Je rencontre actuellement le même problème sur une application web que je modifie pour l'un de mes clients, déployée à l'origine sur Linux MySQL v5.0.83-log. J'utilise maintenant 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 défaut pour la colonne de texte en question. Pourtant, lorsque j'essaie d'exécuter une insertion sur Windows (qui fonctionne bien sur le déploiement Linux), je reçois une erreur de pas de 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 je reçois le message suivant, très utile La colonne BLOB/TEXT ne peut pas avoir de valeur par défaut. .
Encore une fois, ne pas maintenir une compatibilité de base entre les plateformes est inacceptable et constitue un bug.
Comment désactiver le mode strict dans MySQL 5 (Windows) :
-
Editez /my.ini et recherchez la ligne
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-
Remplacez-la par
sql_mode='MYSQL40'
-
Redémarrez le service MySQL (en supposant que c'est mysql5)
net stop mysql5
net start mysql5
Si vous avez un accès Root/admin, vous pouvez peut-être exécuter
mysql_query("SET @@global.sql_mode='MYSQL40'");
1 votes
Peut-on voir la requête que vous avez utilisée ?
2 votes
Êtes-vous sûr de vouloir une colonne TEXT et non VARCHAR ? Les colonnes TEXT sont destinées aux éléments dont la longueur peut dépasser 255 octets.
5 votes
Cela devrait être un commentaire. Aussi, oui, il veut dire
TEXT
- ces colonnes ne peuvent pas avoir de valeur par défaut.VARCHAR
peut.1 votes
Si vous utilisez phpmyadmin pour configurer votre base de données, vous devriez peut-être vous intéresser aux outils gui mysql / workbench... ;)
0 votes
Je sais ce qu'il signifie Je demandais s'il était vraiment besoins une colonne TEXTE. Parce que s'il ne le fait pas, utiliser (VAR)CHAR à la place serait une solution plausible. C'est pourquoi j'ai décidé de poster ceci comme une réponse. Pas besoin de la voter (et de laisser une réponse ne parlant pas du tout des colonnes TEXT à 0).
2 votes
Oui, j'ai besoin de plus de 255 caractères malheureusement.
0 votes
@pekka, je pense que c'est juste une bonne pratique - alors que phpmyadmin est un excellent package, si vous voulez vraiment approfondir la structure de la base de données, et découvrir ce dont mysql est capable, alors un package GUI décent sera toujours payant. Workbench est vraiment sur une autre planète que phpmyadmin, mais je réalise que ce n'est pas toujours une option. Principalement - je trouve que les débutants avec mysql peuvent supposer que phpmyadmin est la "seule" façon d'administrer leur schéma, et de ma propre expérience, c'était comme la lumière au bout du tunnel après avoir utilisé les outils graphiques pour la première fois.
0 votes
Désolé, je vous ai mal compris. Je pensais que vous sous-entendiez que phpMyAdmin était en quelque sorte responsable du message "can't have a default value". Je suis d'accord : Pour les utilisateurs de Windows, il n'y a rien de mieux que la version 5 de HeidiSQL (www.heidisql.com).
1 votes
Au moins, les docs disent que le défaut n'est pas autorisé : > Les colonnes BLOB, TEXT, GEOMETRY et JSON ne peuvent pas se voir attribuer une valeur par défaut. dev.mysql.com/doc/refman/5.7/fr/data-type-defaults.html
0 votes
Si cela était supporté, je voudrais utiliser une valeur par défaut pour une colonne de texte dans MySQL et ma raison est que pour certains champs je ne veux pas distinguer
NULL
à partir de la chaîne vide, mais si je spécifieNOT NULL
sur untext
je suis maintenant obligé de spécifier une valeur pour ce champ chaque fois que j'insère une ligne, ce qui est un mauvais résultat. L'absence de valeur par défaut pour ces champs m'oblige donc à paramétrer tous les champs de texte pour qu'ils autorisent les valeurs suivantesNULL
ou de faire face à des contraintes de codage lourdes pour l'insertion des données. Ce n'est pas une perte énorme mais ce n'est pas comme ça que je préférerais que ça fonctionne. J'aurais aimé qu'ils autorisent au moins une chaîne vide par défaut.