1055错误:
在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句的未通过ONLY_FULL_GROUP_BY语义检查所以报错。
ONLY_FULL_GROUP_BY:ONLY_FULL_GROUP_BY要求select语句中查询出来的列必须是明确的(其他语句也是一样)。
以SQL语句select columes from table group by list为例:columns必须是聚集函数或者在group by后的表达式list中,并且list中必须包含主键,否则也会报错。
insert、update、delete语句都会报错(但不影响SQL语句的执行),因为这三种语句执行之前也会执行查询操作。
以主键为id的表为例:
SELECT count(1) FROM customer GROUP BY `name`;该SQL执行成功,因为count是聚集函数;
SELECT * FROM customer GROUP BY `name`;该SQL执行失败,因为*中包含主键id,而group by后的表达式中并没有包含id
SELECT name FROM customer GROUP BY `name`;该SQL执行成功,因为name包含在group by后的表达式中
SELECT name, contact FROM customer GROUP BY `name`;该SQL执行失败,因为contact没有包含在group by后的表达式中
解决方案:
一、永久解决
1)在MySQL下执行SELECT @@sql_mode语句
2)将查询结果中的ONLY_FULL_GROUP_BY去掉然后复制,打开MySQL的配置文件(my.ini),将sql_mode的值设置为复制的值(若没有sql_mode在[mysqld]下方添加一行即可)。
二、只在当前会话中解决,重新进入MySQL后失效
1)在MySQL下执行SELECT @@sql_mode语句
2)将查询结果中的ONLY_FULL_GROUP_BY去掉然后复制,然后执行set sql_mode = '修改后的值'
1290导入导出问题:
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
解决办法:
在MySQL安装路径找到my.ini文件,
找到这串字“secure_file_priv”,设它没有值:
secure_file_priv=
解释一下,
secure_file_priv 为 null 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 C:\temp 时,表示限制mysqld只能在C:\temp目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示可在任意目录导入导出。
然后重启MySQL服务即可
1292错误:
导入sql脚本的时候报了一个错,在执行建表语句时有一个时间字段属性为 DEFAULT CURRENT_TIMESTAMP,执行sql脚本时插入一条该字段值为“0000-00-00 00:00:00”的数据时报错,后来发现是sql_model的问题,
通过以下sql语句可以查询sql_model的值:select @@sql_mode;
解决方法1: 在配置文件中sql_model中的值去掉 NO_ZERO_IN_DATE和NO_ZERO_DATE即可:(如果没有sql_mode配置项,手动添加即可)(永久解决)
解决方法2:set sql_mode = '修改后的值'(只在当前会话中解决,重新进入MySQL后失效)
文章来源于:https://www.cnblogs.com/haoyul/p/9882853.html
https://blog.csdn.net/h_o_w_e/article/details/89972493