然后你查询的时候,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)结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)