mysql使用ascii字符集,如何处理大小写是否敏感?

mysql使用ascii字符集,如何处理大小写是否敏感?,第1张

这个好实现。在创建表的时候,为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’的数据行查询出来。

另外,真正项目实践中,密码字段不会明文存储在表中的,都是经过各种加密算法,加密后生成一个字符串之后在存储在表中。判断密码匹配的时候,也是根据用户输入的密码,经过相同的算法再次加密后,再和数据库中存储的加密字符串进行比较。所以我觉得你的密码字段没有必要这个这个大小写敏感的设置。

information_schema.columns表中有一个ordinal_position字段,表示的是列标识号,其实就是字段编号,你可以看看这些字段标号是不是按照你现在有字段顺序摆列的,如果是,那么用ordinal_position排序就可以了。如果不是,而是按照你查询information_schema.columns表的顺序编的号,那么可能在建表后有过插入字段(比原来表中没有第四题字段一类的),或者修改字段名称(这个也可能修改字段编号),那么就将数据备份重建该表,这样应该就没有问题了,不过可能也需要按照ordinal_position排序。

创建表:

create table test

(str varchar(10))

insert into test values ('A1')

insert into test values ('A2')

insert into test values ('A10')

insert into test values ('A11')

insert into test values ('B1')

insert into test values ('B2')

insert into test values ('B10')

insert into test values ('B11')

执行:

select * from test order by left(str,1),convert(substr(str,2,length(str)-1),SIGNED)

结果:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8639620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存