Je dois autoriser la sauvegarde de null comme valeur entière sur le serveur mysql, comment puis-je faire cela?comment définir null comme valeur entière sur le serveur mysql?
Répondre
J'ai découvert comment: J'ai caché la ligne ci-dessous puis redémarré le serveur sql et cela a fonctionné.
# Définissez le mode SQL stricte sql-mode = "STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"
Notez cette ligne se trouve dans le fichier my.ini.
Veuillez noter que cela assouplit les contrôles d'intégrité pour l'ensemble du serveur et peut affecter d'autres applications. –
Définissez le champ à ne pas nul et définir sa valeur par défaut à zéro:
CREATE TABLE `t` (
`foo` BIGINT NOT NULL DEFAULT 0
);
Valeur de foo
sera égal à zéro si vous l'envoyez NULL.
non il y a un moyen qui change tout nul à zéro, sans avoir à le faire pour chaque table un par un. Cela fonctionne pour toutes les tables automatiquement. – Luci
@zeina, vous avez dit explicitement "lors de l'insertion ou la mise à jour de la table": -? –
oui le null devrait être converti en zéro tout en le faisant automatiquement à n'importe quelle table. – Luci
En supposant que votre question porte sur le message d'erreur "valeur entière incorrect" ...
mysql> CREATE TABLE `foo` (
-> `foo_id` INT(10) NOT NULL AUTO_INCREMENT,
-> `foo_size` INT(10) NOT NULL DEFAULT '0',
-> PRIMARY KEY (`foo_id`)
->) ENGINE=MyISAM;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO foo (foo_size) VALUES ('');
ERROR 1366 (HY000): Incorrect integer value: '' for column 'foo_size' at row 1
... cela signifie que votre serveur est en cours d'exécution en mode strict (qui est en fait bien). Vous pouvez le désactiver:
mysql> SET @@session.sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO foo (foo_size) VALUES ('');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column 'foo_size' at row 1 |
+---------+------+------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM foo;
+--------+----------+
| foo_id | foo_size |
+--------+----------+
| 1 | 0 |
+--------+----------+
1 row in set (0.00 sec)
... et votre erreur sera rétrogradée en avertissement.
Donc, de toute façon, les avertissements existent toujours? Même le '' peut être inséré comme 0 dans le tableau, est-ce correct? – zhihong
@zhihong - Désolé, je ne suis pas sûr de savoir quelle est votre question: -? –
@ Alvaro-je veux dire: Après avoir désactivé le mode strict, quand insérer la valeur '' à un type de données entier, bien que '0' soit inséré, il génère toujours les avertissements. Parce que mysql reconnaît encore le '' comme une chaîne vide, pas une valeur 0 entière. Je veux trouver un moyen de traiter le '' comme un entier, d'insérer 0 dans la table et de ne pas générer d'avertissement. Mais maintenant, ne pas avoir de chance. – zhihong
Pouvez-vous reformuler la question? Comme il est maintenant, cela n'a pas de sens ... –
Je pense que vous définissez les champs comme non nul, vous devez le déclarer comme accepter null –
bien si j'ai envoyé une valeur comme nulle ou '' il devrait être automatiquement converti à zéro lors de l'insertion ou la mise à jour de la table sur le serveur mysql. Je l'ai fait avant, mais j'ai complètement oublié comment. – Luci