Вставка нуля в символ (1) - PullRequest
       16

Вставка нуля в символ (1)

2 голосов
/ 21 сентября 2010

Я создаю скрипт INSERT и сталкиваюсь с проблемой. Есть среднее начальное поле, которое является символом (1)

Иногда в записях ничего нет в этом поле, поэтому я ставлю NULL. Это приводит к тому, что данные слишком длинные для ошибки столбца. Я не хочу просто ставить '', поскольку это оставляет пустое пространство.

Есть ли другой способ обойти это?

1 Ответ

6 голосов
/ 21 сентября 2010

Похоже, что вы пытаетесь вставить строку 'NULL' в поле char(1) вместо SQL NULL, и у вас включен строгий режим SQL, что предотвращает его усечение до N.

Если вы в состоянии, запустите

SHOW CREATE TABLE <your_table_name>

в оболочке MySQL, чтобы определить, принимает ли целевое поле значения NULL. Без контекста (вы запускаете это как чистый SQL или подключаетесь к базе данных из какой-либо клиентской программы в другом языке?) Трудно найти точное решение, но у вас может быть что-то вроде этого:

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

где 'NULL' - просто строка без особого значения, когда то, что вы намереваетесь это

INSERT <your_table_name>
SELECT first_name, NULL, last_name

Вот иллюстрация:

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

Немного пунта - извиняюсь, если не пользуюсь ...

...