ALTER TABLE info
ADD CONSTRAINT uppercase
CHECK (password = UPPER(substr(password, 1 ,1 )));
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么我的约束不起作用?第一次尝试编写约束,所以请耐心等待。
如果您使用 MySQL,则它不起作用,因为未强制执行约束。在其他一些数据库中,默认排序规则的大小写=相同。而且,无论默认排序规则是什么,它都可能会针对您的数据库进行更改。
您可以轻松做到这一点的一种方法:
ALTER TABLE info
ADD CONSTRAINT uppercase CHECK (ASCII(LEFT(password, 1)) BETWEEN ASCII('A') and ASCII('Z'));
Run Code Online (Sandbox Code Playgroud)
也就是说,在大多数情况下,密码不应以未加密的方式存储在数据库中。这是非常危险的。您可以在数据库层对密码进行加密。我认为在客户端层进行加密会更好,因此自由文本密码甚至无法出现在网络上。