MySQL中sql_mode参数导致的问题

最近在auto_test环境里遇到了个小麻烦。
新加密的数据竟然解密失败,全成了密文。
查看了日志,发现去掉前缀的数据竟然无法进行Base64 转换,这让我怀疑是不是数据在存入数据库时出了问题。
一检查字段长度,发现存储数据的长度是3 2 位,但这和密文格式对不上,猜测可能是MySQL在存储时给截断了。

我查了一下,原来数据库里有个sql_mode参数,负责控制SQL数据的输入校验。
一查才知道,因为之前设置的是非严格模式,所以当数据长度超过字段长度时,系统就会自动截取。
为了解决这个问题,我把sql_mode改成了严格模式,这样一来,就能防止字段长度过长导致的数据错误了。

不过,这也导致了之前的数据丢失,所以现在的新数据得扩展字段长度,重新存入数据库。
严格模式真的挺有用的,能避免因为错误数据造成的不可逆损失。
至于sql_mode的其他配置,比如STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE等,可以参考MySQL的官方文档哦。

解决mysql5.7.9版本sql_mode=only_full_group_by问题

MySQL 5 .7 .9 版本中那个烦人的 sql_mode=only_full_group_by 错误,咋解决呢?别急,我给你支几招。

首先,你可以试试修改一下你的 SQL 查询语句。
这个错误通常是因为你在 GROUP BY 子句里没有把 SELECT 列表里的所有非聚合列都给带上。
简单来说,就是你在分组的时候,选出来的列要么都得是统计函数(比如 COUNT、SUM 这些),要么都得在 GROUP BY 子句里出现。
你看看你的查询语句是不是这样,如果不是,改改就好了。

如果你不想动查询语句,那还有一种方法,就是改一下 MySQL 的配置。
你可以找到 MySQL 的配置文件(一般是在 /etc/my.cnf 或者类似的路径下),然后在 [mysqld] 这部分里添加或者修改 sql_mode 这个选项,把 only_full_group_by 这一项去掉。
比如,你可以改成这样:
ini [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
改完配置文件之后,记得重启一下 MySQL 服务,不然新的配置是不会生效的。
不过,这个方法需要注意的是,它会影响到所有的数据库和应用程序,所以你要是不确定的话,还是小心一点为好。

总的来说,sql_mode 是 MySQL 用来控制处理不符合标准 SQL 语法情况的一个服务器系统变量,而 only_full_group_by 就是其中的一个模式,它要求你在使用 GROUP BY 子句的时候,必须把 SELECT 列表里的所有非聚合列都包含在聚合函数或者 GROUP BY 子句中。
这是为了遵循 SQL 标准,确保查询结果的确定性。
所以,当你遇到这个问题的时候,要么就是你的查询语句没有遵循这个规则,要么就是 MySQL 的配置有问题。

希望这些信息能帮到你,如果你还有其他问题,随时问我哦!

解决MySQL 5.7.9版本sql_mode=only_full_group_by问

最近在用MySQL 5 .7 .9 的时候,碰到了一个挺烦人的GROUP BY语句错误,提示的是"Expression2 ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'col_user_6 .a.START_TIME'whichisnotfunctionallydependentoncolumnsinGROUPBYclause"。
一开始挺懵的,后来查了查资料,发现这问题主要是由于sql_mode设置为'only_full_group_by'造成的。

简单来说,这种模式下,SELECT语句里如果包含了GROUP BY没列出的非聚合列,就会出这个错误。
要解决这个问题,咱们可以临时调整一下sql_mode的设置。
可以试试执行这个命令:SET GLOBAL sql_mode=''; 这样就把sql_mode设置成了默认的非only_full_group_by模式。
执行完之后,你可以用SELECT @@GLOBAL.sql_mode或者SELECT @@sql_mode来确认一下设置是不是已经生效了。

当然啦,sql_mode的设置可能还包括其他选项,比如'STRICT_TRANS_TABLES'、'NO_ZERO_IN_DATE'、'NO_ZERO_DATE'、'ERROR_FOR_DIVISION_BY_ZERO'、'NO_AUTO_CREATE_USER'、'NO_ENGINE_SUBSTITUTION'等等,具体用不用或者怎么用,还是要看你的实际需求。

以上就是解决MySQL 5 .7 .9 中only_full_group_by问题的一个方法。
如果在实践中你还有其他疑问,可以直接在文章下面留言,我会尽快回复大家的。
最后,也谢谢大家对我们网站的支持和关注!

如何在mysql配置文件里将sql-mode修改为NO_AUTO_CREATE_USER?

哈喽,各位小伙伴!今天跟大家聊聊一个常见的问题。
如果你在MySQL数据库中调整了 sql_mode 设置,但重启服务器后好像没啥变化,那别急,咱们一步步来排查。

首先呢,你可以通过MySQL自带的命令来查看当前的 sql_mode 设置。
具体操作是在你的SQL工具里输入 SHOW VARIABLES LIKE '%sql_mode%'。
这个命令能帮你确认一下,你想要修改的那个模式,目前是不是已经生效了,或者之前的设置是不是跟你现在想的不一样。

不过呢,如果你发现重启后这个设置还是没变,那可能问题就出在配置文件上。
MySQL重启后会重新读取配置文件,所以你需要检查一下你的 my.ini 或者 my.cnf 文件。
看看里面是不是正确地设置了 sql_mode。
有时候我们可能会不小心写错,或者配置文件里有多处关于 sql_mode 的设置,这些都会导致MySQL重启后不能正确读取。

还有一个小细节,就是 sql_mode 这个参数名,有时候在不同的系统或者不同的配置文件里,可能会写成 sql-mode 或者 sql_mode,中间的连字符
和下划线 _ 千万别弄混了。
确保你在配置文件里写的和你在SQL命令里查看到的完全一致。

总的来说,如果 sql_mode 设置在重启后不生效,那多半是配置文件的问题。
仔细检查一下,看看是不是有拼写错误,或者配置文件的路径是否正确,有没有多个同名的配置文件被加载了。
这些细节往往就是问题的关键所在。
希望这些小建议能帮到你!

解决MySQL 5.7.9版本sql_mode=only_full_group_by问

Hey小伙伴们,来解决个小问题吧!如果你的MySQL 5 .7 .9 版本里遇到了sql_mode=only_full_group_by的问题,试试以下方法:
首先,咱们来临时改改sql_mode设置。
执行这条命令:SET GLOBAL sql_mode='',这样就能让sql_mode回到默认状态,不是那个只会让你犯难的only_full_group_by模式啦。
这样一来,你就能在SELECT里随便用那些没在GROUP BY里提到的列了,避免错误发生。

改完之后,别急着走,咱们得确认一下设置有没有生效。
来,执行这个查询:SELECT @@GLOBAL.sql_mode 或者 SELECT @@sql_mode,看看返回的结果是否符合预期。

哦对了,调整sql_mode的时候,可能会遇到其他选项,比如STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE等等。
这些选项具体有哪些,得看你的数据库需求和个人设置了。

最后,给个小建议:在调整sql_mode之前,先弄清楚当前设置和每个选项的意思,这样调整之后不会影响到其他操作。
最好还能在开发或测试环境里先试一试,确认没问题再应用到生产环境里去哦!