【1】Error:MySQL server has gone away
背景:将外部sql檔案導入資料庫。
解決辦法:
Linux下修改my.conf;Windows下修改my-default.ini。
添加(修改)如下配置:
wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 256M
如果使用指令方式,隻在目前會話有效,建議修改配置:
show global variables like 'max_allowed_packet';
set global max_allowed_packet=268435456;
set global max_allowed_packet=1024*1024*256;
使用set global指令修改 max_allowed_packet 的值,重新開機mysql後會失效,還原為預設值。
如果不知道如何修改MySQL配置檔案,在運作sql檔案時,可以使用指令方式。
【2】Packet for query is too large
異常如下所示:
Packet for query is too large (1238 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3683) ~[mysql-connector-java-5.1.47.jar:5.1.47]
解決方案
Linux下修改my.cnf檔案在[mysqld]下添加如下配置:
max_allowed_packet = 100M
如果是windows下則修改my.ini檔案。
【3】sql_mode為ONLY_FULL_GROUP_BY的問題
In aggregated query without GROUP BY, expression #32 of SELECT list contains nonaggregated columnXXXXX ' this is incompatible with sql_mode=only_full_group_by
這種模式的官方解釋:
ONLY_FULL_GROUP_BY
是MySQL資料庫提供的一個sql_mode, 通過這個 sql_mode 來保證, SQL語句 “分組求最值” 合法性的檢查. 這種模式采用了與 Oracle、DB2 等資料庫的處理方式。即不允許 select target list 中出現語義不明确的列。
對于用到 GROUP BY 的 select 語句, 查出來的列必須是 group by 後面聲明的列, 或者是聚合函數裡面的列有這樣一個資料庫的表。
臨時方案-會話有效
set @@GLOBAL.sql_mode='';
set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"