查询SQL报错问题[Table '***.****' doesn't exist]

in Linux with 0 comment

打开以前参与的项目,跑起来,查询就报错:

         Table '***.****' doesn't exist

意思是表不存在,但是数据库中表明明是存在的,然后猜想是不是因为mysql区分大小写的问题,经过尝试后,果然是这个问题。
解决方案:
在my.cnf中的[mysqld]下,追加lower_case_table_names = 1
1表示不区分大小写,0区分大小写
当这个问题解决后以后就可以顺利的跑起来时,又出现幺蛾子了:
报错提示:

which is not functionally dependent on columns in GROUP BY clause;

原因:在于在5.7下mysql的model默认为:ONLY_FULL_GROUP_BY
这个简单,问题在于GROUP BY与only_full_group_by 不兼容导致的出错
sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误 如以下sql:

select a.col1, a.col2 from table as a group by col1 //会因为ONLY_FULL_GROUP_BY的缘故抛出上面错误

解决方案:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

若未生效尝试如下sql

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

意义取消掉ONLY_FULL_GROUP_BY模式设置