mysql - 将 NOT NULL 约束添加到列

标签 mysql sql phpmyadmin

我正在使用 PHPMyAdmin 并尝试将 NOT NULL 约束添加到我的表的一列。

PHPMyAdmin 接受我的以下查询:

ALTER TABLE `wall` MODIFY `token_message` varchar(40) NOT NULL;

但我仍然可以插入空字符串(=NULL),我不明白为什么。

PS:如果你要给我一些其他的查询来添加这个约束,请注意我已经尝试了这 3 个在我的 PHPMyAdmin 中不起作用(错误类型:#1064 - 你有一个错误你的 SQL 语法;检查手册):

ALTER TABLE `wall` ALTER COLUMN `token_message` SET NOT NULL;
ALTER TABLE `wall` ALTER COLUMN `token_message` varchar(40) NOT NULL;
ALTER TABLE `wall` MODIFY `token_message` CONSTRAINTS token_message_not_null NOT NULL; 

最佳答案

您写道,“我仍然可以插入空字符串 (=NULL)”,这听起来像是一种误解。在 SQL 中,空字符串的计算结果不会为 NULL,反之亦然。尝试插入一个空字符串并执行 SELECT from wall where token_message is NULL。您应该返回零行。然后尝试在指定 NULL(未加引号)作为列值的位置执行插入操作,您应该会收到预期的错误消息。

如果这些测试按预期工作,那么一切都很好,你的问题实际上是你想防止插入空白字符串。查看this question以获取建议,或者在查询之前在验证期间检查空白字符串。

关于mysql - 将 NOT NULL 约束添加到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218252/

相关文章:

MySQL - 如何将整个数据库转换为 utf8

MySQL LEFT JOIN 对于缺失行不返回 NULL

php - 如何将一个字符串与另一个字符串值精确匹配?

mysql - 安装phpmyadmin后,出现错误问题

mysql - phpmyadmin 不工作

mysql - 将表单数据存储为 JSON

php - 当 nginx 和 db 在不同的服务器上时,db 查询出错? "PHP message: Database transaction aborted automatically in"

mysql - sql查询来检查多个数据多次出现在不同的字段上

mysql - 如何在流行的 SQL 平台上通过 SQL 查询请求数据库模式?

database - PhpMyAdmin 导入错误数据库