2 Stimmen

Null in char(1) einfügen

Ich erstelle gerade ein INSERT-Skript und stoße dabei auf ein Problem. Es gibt ein mittleres Initialfeld, das ein char(1) ist.

Manchmal haben die Datensätze nichts in diesem Feld, dann setze ich einen NULL-Wert ein. Dies führt zu einem Fehler "Daten zu lang für Spalte". Ich möchte nicht nur ' ' eingeben, da dies nur ein Leerzeichen hinterlässt.

Gibt es eine andere Möglichkeit, dies zu umgehen?

6voto

martin clayton Punkte 74309

Es klingt, als ob Sie versuchen, die Zeichenfolge 'NULL' in die char(1) Feld und nicht ein SQL NULL, und Sie haben den strikten SQL-Modus aktiviert, der verhindert, dass dies auf N .

Wenn Sie dazu in der Lage sind, führen Sie

SHOW CREATE TABLE <your_table_name>

in der MySQL-Shell, um festzustellen, ob Ihr Zielfeld NULLs akzeptiert. Ohne Kontext (führen Sie dies als reines SQL aus oder verbinden Sie sich mit der Datenbank von einem Client-Programm in einer anderen Sprache aus?) ist es schwierig, eine genaue Lösung zu finden, aber vielleicht haben Sie so etwas:

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

wobei 'NULL' einfach eine Zeichenkette ohne besondere Bedeutung ist, wenn Sie Folgendes beabsichtigen

INSERT <your_table_name>
SELECT first_name, NULL, last_name

Hier ist eine 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

Ein kleiner Versuch - entschuldigen Sie, wenn es nichts nützt ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X