今天做了一个需求,是一个管理台对接到一个统一的门户,门户那边可以直接进行验证跳转到管理台,管理台这边就不需要登录了,说白了就是做了一个集成的系统,能管理好多后台,这样用户通过统一的界面就可以访问自己有权限可以访问的管理台。
联调测试的时候遇到一个问题就是门户登录的时候用户名大小写没有限制
字符串比较:使用equals()方法比较两个字符串是否相等,该方法区分大小写。
但我恰好没用equals比较用户名,我是通过用户名直接去数据库查询的,所以造成大小写没限制。
解决办法:
SELECT * FROM user WHERE BINARY name = 'search_value';
就是加一个BINARY,这样就可以解决大小写没有限制的问题啦!
扩展:
一、数据库大小写区分
从数据库查询的数据区分大小写取决于所使用的数据库管理系统(DBMS)和支持的查询语言。一些DBMS默认区分大小写,而另一些则不区分。以下是一些常见DBMS中查询数据时区分大小写的情况:
- Oracle数据库:
在Oracle中,查询数据时默认区分大小写。如果需要不区分大小写地进行查询,可以使用
函数将查询内容转换为统一的大小写形式,例如:
SELECT * FROM my_table WHERE UPPER(column_name) = UPPER('search_value');
这将将列名和查询值都转换为大写,然后进行比较。
2.MySQL数据库:
在MySQL中,查询数据时默认区分大小写。如果需要不区分大小写地进行查询,可以使用
函数将查询内容转换为统一的大小写形式,例如:
SELECT * FROM my_table WHERE BINARY column_name = 'search_value';
这将使用BINARY函数将列名和查询值都转换为二进制形式,然后进行比较。
3.SQL Server数据库:
在SQL Server中,查询数据时默认区分大小写,但可以使用COLLATE子句指定特定的排序
规则来控制大小写敏感性。例如:
SELECT * FROM my_table WHERE column_name COLLATE Latin1_General_CS_AS = 'search_value';
这将使用COLLATE子句指定Latin1_General_CS_AS排序规则,将列名和查询值进行比较,以区分大小写。
总之,在查询数据库数据时,要根据所使用的DBMS和查询语言的特点来了解大小写敏感性的情况。如果需要不区分大小写地进行查询,可以灵活使用函数、COLLATE子句等技巧来处理查询条件。
二、字符串大小写比较
在Java中,可以使用以下方法对字符串进行大小写区分:
-
字符串比较:使用equals()方法比较两个字符串是否相等,该方法区分大小写。例如:
String str1 = "Hello";
String str2 = "hello";
if (str1.equals(str2)) {
System.out.println("Strings are equal.");
} else {
System.out.println("Strings are not equal.");
}
2.字符串转换:可以使用toUpperCase()或toLowerCase()方法将字符串转换为大写或小写
形式,然后进行比较。例如:
String str1 = "Hello";
String str2 = "hello";
if (str1.toUpperCase().equals(str2.toUpperCase())) {
System.out.println("Strings are equal.");
} else {
System.out.println("Strings are not equal.");
}
注意:在第二段代码中,使用了toUpperCase()方法将两个字符串转换为大写形式,然后再进行比较。这样可以避免大小写差异造成的不必要的错误。
总之,在Java中,要根据具体情况来选择合适的方法进行字符串的大小写区分。