[ERR] 1292 - Incorrect datetime value: ‘0000-00-0000:00:00‘ for column ‘BIRTH_DATE‘ at row 1
此問題是mysql當前配置不支持日期為空,或者為‘0000-00-0000:00:00‘得情況
1、直接在數據庫執行
# 修改全局
set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
# 修改當前
set @@sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
2、然后刷新,重新連接數據庫,就解決問題了
出現這種情況就是:數據庫不支持Datetime為0的情況,更換一下模式就可以了
也可以配置到mysql.ini下(windows)
執行報錯Unknown error 3065。
mysql中distinct和order by 一起用時,order by的字段必須在select中
mysql 5.7.14
SELECT DISTINCT evt_tim FROM evt_etl ORDER BY evt_id ASC;
執行報錯Unknown error 3065。
因為找不到3065錯誤的詳細信息,因此做了一下測試:
- 1.SELECT DISTINCT evt_id FROM evt_etl ORDER BY evt_id ASC;
- 2.SELECT DISTINCT evt_tim,evt_id FROM evt_etl ORDER BY evt_id ASC;
- 3.SELECT evt_tim FROM evt_etl ORDER BY evt_id ASC;
1,2,3 這三條語句均執行正確。
mysql distinct和order by 一起用時,order by的字段必須在select中。
網上查了一下資料,原因總結如下:
首先,在mysql中distinct 的執行順序高于order by。
第二,distinct執行時會對查詢的記錄進行去重,產生一張虛擬的臨時表;
第三,order by執行時對查詢的虛擬臨時表進行排序,產生新的虛擬臨時表。
綜合來看,如果order by的字段不在select中,執行sql語句時首先執行distinct,之后產生的虛擬臨時表中沒有order by的字段,所以再執行order by時會報錯。
?
解決方法
檢查mysql中是否設置了這個
sql_mode=STRICT_TRANS_TABLES
<p>這個錯誤信息通常出現在 MySQL 中,它表示 MySQL 配置文件中沒有定義 <code>sql_mode</code> 參數,或者您的 MySQL 版本不支持它。<code>sql_mode</code> 參數用于控制 MySQL 在執行查詢時的行為。具體來說,<code>NO_ENGINE_SUBSTITUTION</code> 參數會禁止 MySQL 在找不到指定的存儲引擎時使用默認存儲引擎進行替換,而 <code>STRICT_TRANS_TABLES</code> 參數會啟用嚴格的事務模式,不允許插入無效的數據。</p>
STRICT_TRANS_TABLES</code> 參數會啟用嚴格的事務模式
實際上就是sql寫得不規范時,mysql是嚴格模式時某些sql就會報錯
但是mysql沒有設置該模式或是其它模式時,這些sql正常
由于生產沒有啟用該模式,所以這里也去掉該設置,測試環境運行正常