2010-09-20 8 views
2

Je crée un script INSERT et je rencontre un problème. Il y a un champ initial moyen qui est un caractère (1)Insertion de null dans char (1)

Parfois, les enregistrements n'ont rien dans ce champ, donc j'ai mis une valeur NULL. Cela provoque une donnée trop longue pour l'erreur de colonne. Je ne veux pas juste mettre '' car cela laisse juste un espace vide.

Existe-t-il une autre solution?

+5

Suis-je le seul confus quant à la raison pour laquelle il est marqué "nouveau"? – Gabe

+0

Non, je suis confus aussi :) – jrharshath

+0

n'est pas plus nouveau comme, "newbie"? hahaha – Philip

Répondre

6

Il semble que vous essayez peut-être d'insérer la chaîne 'NULL' dans le champ char(1), plutôt que d'un NULL SQL, et vous avez le strict mode SQL activé, ce qui empêche celle-ci étant tronquée à N.

Si vous êtes en mesure, exécutez

SHOW CREATE TABLE <your_table_name> 

dans le shell MySQL pour déterminer si votre champ cible accepte les valeurs NULL. Sans contexte (vous exécutez ce SQL comme pur, ou la connexion à la base de données de certains programme client dans un autre langauge?), Il est difficile de fournir la solution exacte, mais vous pouvez avoir quelque chose comme ceci:

INSERT <your_table_name> 
SELECT first_name, 'NULL', last_name 

où « NULL » est simplement une chaîne sans signification particulière, alors que ce que vous avez l'intention est

INSERT <your_table_name> 
SELECT first_name, NULL, last_name 

Voici une illustration:

mysql> CREATE TABLE my_table (middle_initial CHAR(1) NULL); 
mysql> INSERT INTO my_table SELECT 'NULL'; 
mysql> SHOW WARNINGS; 

Level  Code Message 
Warning  1265 Data truncated for column 'middle_initial' at row 1 

mysql> SELECT * FROM my_table; 

middle_initial 
-------------- 
N 

mysql> set sql_mode = 'STRICT_TRANS_TABLES'; 

mysql> INSERT INTO my_table SELECT 'NULL'; 

ERROR 1406 (22001) at line 16: Data too long for column 'middle_initial' at row 1 

mysql> INSERT INTO my_table SELECT NULL; 
mysql> SELECT * FROM my_table; 

middle_initial 
-------------- 
N 
NULL 

Bit d'un botté de dégagement - excuses si aucune utilisation ...

+0

Sons très possible –

+0

+1 pour une réponse très complète – Hammerite

Questions connexes