SQL 约束首字母大写

use*_*005 2 sql constraints

ALTER TABLE info
ADD CONSTRAINT uppercase 
CHECK (password = UPPER(substr(password, 1 ,1 )));
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 5

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

您可以轻松做到这一点的一种方法:

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

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