发表于: 2017-11-21 17:39:34
1 544
今天完成的事情:改了表 又重来一遍 出现了新的问题
明天计划的事情:再把这个框架整体调好 讲小课堂
遇到的问题:重构了代码 在最后开发机resources插入数据时报错 发现是去掉了组名 和张鑫的冲突了
duplicate entry 重复条目
我的是polyfinance 张鑫的是polyFinance
首先看一下 表结构
desc resources
show create table resources;
CREATE TABLE `resources` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` varchar(200) DEFAULT NULL,
`resource` varchar(200) DEFAULT NULL,
`strategy` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1120 DEFAULT CHARSET=utf8
查了一下 mysql的字段值是默认忽略大小写
这里涉及到校对规则 字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则 .
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写 新版本貌似取消了 我是没看到
*_ci: case insensitive collation,不区分大小写
所以更改这里的collation就可以 navicate操作简单
mysql 语句 alter table resources change name name varchar(200) binary;
成功更改了排序规则 但是 他还报了一个错误 1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
网上搜了一下 说是 在my.cnf 里面设置sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'在sql_mode 中去掉only_full_group_by 解决问题!
可是依然不知道sql_mode是什么?sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题
sql_mode常用值5.7.x版本默认如下:ONLY_FULL_GROUP_BY
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。
在严格模式下,不要让GROUP BY部分中的查询指向未选择的列,否则报错。这些看看就好
然后回到我们原本的问题 可以直接建表的时候指定
或者直接 在 查询时指定collation select * from t1 where name = binary 'YOU';
到这里就结束了吗 事实上 这里发现 还比较复杂 除了字段 还涉及到列 表 数据库名的大小写敏感
这些就只做参考 不深究了
4、字段内容默认情况下是大小写不敏感的。
然而windows下 都不区分
查看大小写区分命令 mysql> show variables like "%case%";
可以修改my.ini或者my.cnf lower_case_table_names=1 这个是表名
(0:区分;1:不区分) 注意请重启
更加具体的 请参考 官方文档 http://dev.mysql.com/doc/refman/5.7/en/charset-binary-collations.html
收获:邮箱从原先的时代继承来的 大小写不区分 密码大小写是否区分 看加密方式 用户名也不区分大小写了 麻烦
评论