[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated

背景:

最近在使用MySQL数据库时,遇到了两个问题:一个是在导入数据的时候,报错说datetime默认值不能为0000 ;另一个是程序在运行时,报了以上标题上的错误,这两个错误都是修改了MySQL的配置文件中的sql_mode得以解决。

目的:

本篇文章一是记录这个解决办法,二是记录一下这些基本的Linux操作命令。

查看sql_mode的值是ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION

解决办法:

前面一个默认值问题,去掉NO_ZERO_IN_DATE, NO_ZERO_DATE就可以了,标题的这个错误去掉ONLY_FULL_GROUP_BY就可以了。

my.cnf是mysql启动时加载的配置文件,我们找到这个文件,看看它的内容

全局搜索 : find / -name my.cnf

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated

切到etc目录下:cd /etc
查看内容:cat my.cnf 或 cat my.cnf more

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated
可以看到sql_mode的值,这个值是我改过之后的值,没改之前是ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION,比如我们要去掉该配置中的ONLY_FULL_GROUP_BY这一项。

修改文件:vi my.cnf

    使用键盘上的Page Up和Page Down键可以上下翻页;按下Insert键,可以见到窗口左下角有“Insert”字样,表示当前为插入编辑状态,这时从键盘输入的内容将插入到光标位置;再按下Insert键,左下角将有“Replace”字样,表示当前为替换编辑状态,这时从键盘输入的内容将替换光标位置的内容。

保存

    编辑完内容后,按下Esc键,并输入“:wq”,然后回车就可以保存退出。

    如果不想保存而直接退出,则按下Esc键后,输入“:q!”,然后回车即可。“wq”表示Write和Quit,即保存退出;“q!”表示忽略修改强行退出。
    修改完成后,可以再查看my.cnf文件内容,可以看到已经修改好了。

重新启动mysql,让配置生效:service mysqld restart

启动之后,可以查看mysql的端口,默认是3306端口有没有起来

查看端口占用情况:netstat -lnp

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated

MySQL已经启动了。