2010-08-23 6 views
2

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?

+0

Pouvez-vous reformuler la question? Comme il est maintenant, cela n'a pas de sens ... –

+0

Je pense que vous définissez les champs comme non nul, vous devez le déclarer comme accepter null –

+0

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

Répondre

2

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.

+0

Veuillez noter que cela assouplit les contrôles d'intégrité pour l'ensemble du serveur et peut affecter d'autres applications. –

1

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.

+0

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

+0

@zeina, vous avez dit explicitement "lors de l'insertion ou la mise à jour de la table": -? –

+0

oui le null devrait être converti en zéro tout en le faisant automatiquement à n'importe quelle table. – Luci

3

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.

+0

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

+0

@zhihong - Désolé, je ne suis pas sûr de savoir quelle est votre question: -? –

+0

@ 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

Questions connexes