我有下表定义:
CREATE TABLE `invite` (
`id` varchar(255) CHARACTER SET utf8 NOT NULL,
`email` varchar(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uc_i_e` (`email`)
)
我对 not null 约束的目标id
是确保没有空值作为主键,并最终无法插入。
但是,在插入时不指定 id 就可以了:
INSERT INTO invite (`email`) VALUES ('[email protected]');
有一个 1364 警告指定Field 'id' doesn't have a default value
,但插入成功就好了。
看起来 MySQL 在插入时使用非空约束将其转换为非空(空白)值。
如果我实际指定null
为 的值id
,插入将按预期失败。
如果没有触发器来停止插入空字符串,我如何才能阻止这种情况的发生,即强制指定一个非空字符串值?
要防止发生这种插入,请打开严格模式。
注意:请务必按照我提供的链接中的说明进行操作,不要复制我关于设置的命令
sql_mode
。否则您可以禁用其他设置。