1、表中字段区分大小写的设置

在使用gorm查询的时候,会出现账户名Aa是一样的情况,是因为mysql默认不区分大小写造成的

1.问题产生的原因

MySQL在Windows下都不区分大小写。
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;

MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。

2、mysql中的排序规则

utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。(注意:在Mysql5.6.10版本中,不支持utf8_genral_cs!!!

3、解决办法

1、binary关键字

直接修改sql查询语句,在要查询的字段前面加上binary关键字即可。(不推荐)

1、在每一个条件前加上binary关键字

select * from user where binary username = 'admin' and binary password = 'admin';
select * from user where username like binary('admin') and password like binary('admin');

1、修改表结构

ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
`gorm:"unique" sql:"type:VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin"`

更多相关文章

  1. Android系统配置数据库注释(settings.db)
  2. Android下Excel的操作
  3. 【Android】文件读写操作(含SDCard的读写)
  4. Android(安卓)中数据库查询方法 query() 中的 select
  5. [置顶] android orm映射框架(类似hibernate)基本使用
  6. android 百度地图3.0+常用操作
  7. 转:Android下文件操作模式(含SDCard的读写)
  8. android音频、视频、拍照基础操作
  9. Android之再谈文件操作和SDcard读写

随机推荐

  1. 最新发布!webpack 4.0.0-alpha.0 特性
  2. 宏观视角看递归
  3. HTML 5.2中有些什么新变化?
  4. 从简单到复杂,一文带你搞懂滑动窗口在数组
  5. Ansible 之 ansible-playbook基础入门例
  6. Python是否支持复制字符串呢?
  7. Python进阶:全面解读高级特性之切片!
  8. 大名鼎鼎的Requests库用了什么编码风格?
  9. getchar()与循环(九)
  10. join()方法的神奇用处与Intern机制的软肋