Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion de null dans char(1)

Il semble que vous tentiez d'insérer la chaîne 'NULL' dans le char(1) champ, plutôt qu'un SQL NULL, et vous avez activé le mode SQL strict, ce qui empêche qu'il soit tronqué à N .

Si vous le pouvez, courez

SHOW CREATE TABLE <your_table_name>

dans le shell MySQL pour déterminer si votre champ cible accepte les valeurs NULL. Sans contexte (exécutez-vous ceci en tant que SQL pur ou vous connectez-vous à la base de données à partir d'un programme client dans un autre langage ?), 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, quand ce que vous voulez 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

Un peu un botté de dégagement - excuses si pas d'utilisation ...