Я использую сервер базы данных MySQL ** (версия сервера: 5.5.40-0ubuntu0.14.04.1-log — (Ubuntu)) **.
Там в одной таблице под названием 'users'
в базе данных. В таблице 'users'
есть одна колонка под названием 'full_name'
,
Ниже приведены ограничения на это
Name : full_name
Type : `varchar(255)`
Collation : `latin1_swedish_ci`
Attributes :
Null : No
Default : None
Extra :
Проблема, с которой я сталкиваюсь в этой колонке ('full_name'
) это кое-где из кода PHP пустой значение вставляется в этот столбец, хотя я добавил НЕНУЛЕВОЙ ограничение.
Я хочу избежать этой вещи из любой точки мира. То есть пустые / пустые / пробельные символы / NULL не должны вставляться в этот столбец. Я хочу сделать это из самой таблицы базы данных, а не вносить изменения в код PHP.
Может кто-нибудь, пожалуйста, помогите мне предотвратить вставку таких значений в этот столбец?
Еще одна вещь, есть несколько записей в этой таблице, которая содержит НОЛЬ значение в поле 'full_name'
, Я думаю, что эти ценности присутствовали до того, как я добавил НЕНУЛЕВОЙ ограничение на столбец 'full_name'
, Мое другое сомнение в том, являются ли они NULL
значения, влияющие на столбец?
Вы можете добавить проверочное ограничение следующим образом:
full_name VARCHAR(45) CHECK (full_name <> '')
ОБНОВИТЬ:
Как @vhu указал :
CHECK () анализируется, но игнорируется как часть оператора CREATE.
Таким образом, вы должны добавить СПУСКОВОЙ КРЮЧОК перед ВСТАВИТЬ для тебя users
Таблица.
Этот ТРИГГЕР будет называться до ВСТАВКА, и он проверит, если значение установить a
пустой. Если это правда, a
будет установлен в NULL:
CREATE TRIGGER `test_BINS` BEFORE INSERT ON `test` FOR EACH ROW
IF new.`a` = '' THEN SET new.`a` = NULL; END IF; END;
test
это имя таблицы, test_BIN
это имя ТРИГГЕР и a
это имя одного столбца таблицы test
,
Примечание. Этот код был создан MySQL Workbench.
Других решений пока нет …