第一个字母的SQL约束是大写的

时间:2014-11-08 21:21:23

标签: sql constraints

ALTER TABLE info
ADD CONSTRAINT uppercase 
CHECK (password = UPPER(substr(password, 1 ,1 )));

我很好奇为什么我的约束不起作用?第一次尝试写约束,所以请耐心等待。

1 个答案:

答案 0 :(得分:2)

如果您使用的是MySQL,则不起作用,因为不会强制执行约束。在某些其他数据库中,=的默认排序规则大小写相同。而且,无论默认排序规则如何,都可能会对您的数据库进行更改。

您可以轻松做到这一点:

ALTER TABLE info
    ADD CONSTRAINT uppercase CHECK (ASCII(LEFT(password, 1)) BETWEEN ASCII('A') and ASCII('Z'));

也就是说,在大多数情况下,密码应该以未加密的方式存储在数据库中。这非常危险。您可以在数据库层加密密码。我认为在客户端层进行加密更好,所以自由文本密码甚至不能在网络上进行加密。