mysql>insert into test values(7,char(129))
Query OK, 1 row affected (0.00 sec)
mysql>insert into test values(7,char(130))
Query OK, 1 row affected (0.00 sec)
mysql>insert into test values(7,char(128))
Query OK, 1 row affected (0.00 sec)
mysql>insert into test values(7,char(128))
Query OK, 1 row affected (0.00 sec)
mysql>select ascii(name) from test where id=7
+-------------+
| ascii(name) |
+-------------+
| 129 |
| 130 |
| 128 |
| 128 |
+-------------+
4 rows in set (0.00 sec)
mysql>select * from test where id=7
+------+------+
| id | name |
+------+------+
|7 | ? |
|7 | ? |
|7 | €|
|7 | €|
+------+------+
4 rows in set (0.00 sec)
显示为?是因为当前字符集的原因,试试改你的数据库字符集
这个好实现。在创建表的时候,为user_name字段,指定其排序规则为:utf8mb4_general_ci,为user_password字段,指定其排序规则为:utf8mb4_bin。然后你查询的时候,where user_name = 'ab'会把表中user_name的值为:‘ab’、‘Ab’、‘AB’、‘aB’的数据行都查询出来。
而当使用 where user_password = 'ab';只会把表中user_password的值为:‘ab’的数据行查询出来。
另外,真正项目实践中,密码字段不会明文存储在表中的,都是经过各种加密算法,加密后生成一个字符串之后在存储在表中。判断密码匹配的时候,也是根据用户输入的密码,经过相同的算法再次加密后,再和数据库中存储的加密字符串进行比较。所以我觉得你的密码字段没有必要这个这个大小写敏感的设置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)