我想从数据库中的一行获取内容,并将其小写版本与用户输入的小写版本进行比较,以检查它是否存在于数据库中:
"SELECT `id` FROM `user_accounts` WHERE `username` = '".strtolower($username)."'"
Run Code Online (Sandbox Code Playgroud)
如何从mysql获取小写的用户名?
And*_*ong 26
你使用lower(username)http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lower
"SELECT `id` FROM `user_accounts` WHERE LOWER(`username`) = '".strtolower($username)."'"
Run Code Online (Sandbox Code Playgroud)
如果您确实希望大小写无关紧要,那么您应该将列的排序规则设置为不区分大小写.
mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
Query OK, 0 rows affected (0.03 sec)
mysql> SELECT 'foobar' = 'FoObAr';
+---------------------+
| 'foobar' = 'FoObAr' |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.01 sec)
mysql> SELECT 'fOoBaR' = 'FoObAr';
+---------------------+
| 'fOoBaR' = 'FoObAr' |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT 'fOoBaR' = 'FoObAz';
+---------------------+
| 'fOoBaR' = 'FoObAz' |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
如上所述,理想情况下这应该有效,
$query = "SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`) = '".strtolower($username)."'";
Run Code Online (Sandbox Code Playgroud)
但如果“user_accounts”表中的“username”列定义为 VARBINARY,则它将不起作用。原因是VARBINARY要求数据区分大小写