sql >> Base de Datos >  >> RDS >> Mysql

Insertar nulo en char(1)

Parece que puede estar intentando insertar la cadena 'NULL' en el char(1) campo, en lugar de SQL NULL, y tiene habilitado el modo SQL estricto, lo que evita que se trunque a N .

Si puedes, corre

SHOW CREATE TABLE <your_table_name>

en el shell de MySQL para determinar si su campo de destino acepta valores NULL. Sin contexto (¿está ejecutando esto como SQL puro o se está conectando a la base de datos desde algún programa cliente en otro idioma?) es difícil proporcionar la solución exacta, pero es posible que tenga algo como esto:

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

donde 'NULL' es simplemente una cadena sin significado especial, cuando lo que pretendes es

INSERT <your_table_name>
SELECT first_name, NULL, last_name

Aquí hay una ilustración:

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 poco de despeje:disculpas si no sirve ...