MySQL环境变量引起的一些错误

1,007 阅读1分钟

1. ERROR 1067 (42000): Invalid default value for 'date_time'.

这个是SQL Mode中指定了NO_ZERO_DATE导致的,不允许Null作为日期的默认值。 解决这个问题只要修改SQL Mode就OK了

SET @@session.sql_mode = REPLACE((SELECT @@session.sql_mode), ',NO_ZERO_DATE', '')

但是这样只会修改本次连接的SQL Mode,如果需要修改全局的,则只需要修改@@session@@global

SET @@global.sql_mode = REPLACE((SELECT @@global.sql_mode), ',NO_ZERO_DATE', '')

但是这些都只是临时修改,数据库重启后就又恢复原值了。如果要永久修改,则需要修改my.cnf配置文件。每个平台的配置文件地址都不一样。使用以下命令来查找默认配置文件地址:

mysqld --verbose --help | grep -A 1 "Default options"

然后修改my.cnf文件添加下面的配置,修改为你想要的SQL Mode,然后重启MySQL服务。

[mysqld]
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

如果不知道默认的SQL Mode,可以查询得到再修改。

SELECT @@global.sql_mode

2. ERROR java.lang.IllegalStateException: please check your GROUP_CONCAT_MAX_LENGTH in mysql

这个是MySQL中group_concat_max_len默认长度只有1024,容易超出,设置起来和上面一样。 对于32位系统,最大值为4294967295。对于64位系统,最大值为18446744073709551615。 当前连接设置

SET @@session.group_concat_max_len = 4294967295;

全局级设置

SET @@global.group_concat_max_len = 4294967295;

永久修改,一样的修改my.cnf文件

[mysqld]
group_concat_max_len=4294967295

3. 总结

MySQL的环境变量分为Session级,Global级和配置文件级别,需要根据情况选择适合自己的改法。