gorm是一种用于操作MySql数据库的强大工具。使用gorm进行查询时,你可能会遇到一个问题:账户名A和a被认为是相同的。这是因为mysql默认不区分大小写。
1.问题产生的原因
MySQL在Windows下对大小写不敏感。
而在Linux下,数据库名、表名、列名和别名的大小写规则是这样的:
1、数据库名和表名是严格区分大小写的;
2、表的别名也是严格区分大小写的;
3、列名和列的别名在任何情况下都是忽略大小写的;
4、变量名也是严格区分大小写的;
这导致在查询字符串时,MySQL是不区分大小写的。在编译MySQL时,通常使用ISO-8859字符集作为默认字符集,这种字符集对大小写不敏感。因此,在比较过程中,中文编码字符的大小写转换会导致这种现象。
2、mysql中的排序规则
。。字符串中的每一个字符使用二进制数据进行存储,并且能区分大小写。utf8_genera_ci不考虑大小写,ci代表大小写不敏感。utf8_general_cs能区分大小写,cs代表大小写敏感。(需要注意的是,在Mysql5.6.10版本中,不支持utf8_genral_cs!!!
3、解决方法
1、使用binary关键字
直接在sql查询语句中,在要查询的字段前面加上binary关键字。(不建议使用)
1、在每个条件前面加上binary关键字
1 select * from user where binary username = 'admin' and binary password = 'admin';
2、将参数用binary('')来包围起来。
。1、对于用户表,查询所有符合以下条件的记录:用户名中包含二进制的"admin",并且密码中包含二进制的"admin"。
2、改变排序规则属性
在创建表时,可以直接将表的排序规则属性设为utf8_general_cs或utf8_bin;如果表已创建,则可以直接修改字段的排序规则属性为utf8_general_cs或utf8_bin。