sql >> Database >  >> RDS >> Mysql

Null invoegen in char(1)

Het klinkt alsof je de string 'NULL' . probeert in te voegen in de char(1) veld, in plaats van een SQL NULL, en je hebt de strikte SQL-modus ingeschakeld, waardoor wordt voorkomen dat dit wordt afgekapt tot N .

Als je in staat bent, ren dan

SHOW CREATE TABLE <your_table_name>

in de MySQL-shell om te bepalen of uw doelveld NULL's accepteert. Zonder context (gebruik je dit als pure SQL, of maak je verbinding met de database vanuit een clientprogramma in een andere taal?) is het moeilijk om de exacte oplossing te bieden, maar je hebt misschien zoiets als dit:

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

waarbij 'NULL' gewoon een tekenreeks is zonder speciale betekenis, terwijl je bedoeling is

INSERT <your_table_name>
SELECT first_name, NULL, last_name

Hier is een illustratie:

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

Een beetje een gok - excuses als het geen zin heeft ...




  1. Een Oracle-functie aanroepen vanuit Java

  2. Indien anders in de WHERE-clausule

  3. Efficiëntere woordgrensquery in mySQL

  4. Laatst ingevoegde id ophalen met Mysql