mysql的一些错误处理

2020-03-08

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

{/if}