dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:1862回复:1

mysql sql_mode

楼主#
更多 发布于:2015-09-16 10:46
环境
mysql 5.6.x

问题描述
配置my.cnf 配置 sql_mode 无效。

1. 配置文件

tail -n1 /etc/my.cnf
#
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#

mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)

2. set 全局变量仍然无效
mysql> set global sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#
mysql> show variables like "sql_mode";
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.00 sec)

解决方法
1. 编辑 mysql 启动脚本文件
vim /etc/init.d/mysqld
2. 更改
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
3. 添加
--sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
4. 更改后如下
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" $other_args >/dev/null 2>&1 &
5. 重启数据库
/etc/init.d/mysqld restart

验证

mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)

参考:http://www.olinux.org.cn/mysql/846.html

#END
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2017-03-24 14:42
mysql 5.7 配置 sql_mode
环境
mysql 5.7 on docker

错误描述
mysql> select count(ip),update_time from user_apply group by ip;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dongnan.user_apply.update_time' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

错误原因
mysql 5.7 开始,默认 sql_mode 包含 ONLY_FULL_GROUP_BY 参数;
show variables like "sql_mode" \G;
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)

解决方法
创建 mysql 容器时,指定 sql_mode 参数(--sql-mode="modes" ),例如:
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="dongnan" \
      -e MYSQL_USER="dongnan" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      -v /data/container/dongnan/mysql:/var/lib/mysql \
      -v /etc/localtime:/etc/localtime:ro \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"  

验证

mysql> show variables like "sql_mode" \G;
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)

参考

http://www.cnblogs.com/grimm/p/5751911.html
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

#
游客

返回顶部