1. 程式人生 > >mysql 8.0 採坑總結

mysql 8.0 採坑總結

一、安裝採坑

mysql 8.0安裝成功後使用 navicat 開啟連線,會報 2059 錯誤 (1)報錯提示:2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded:���� 在這裡插入圖片描述

(2)錯誤原因:安裝時選擇了強加密規則 caching_sha2_password,與之前 mysql 版本 mysql_native_password 規則不同,vavicat 驅動目前不支援新的加密規則

(3)解決方法: 1.cmd輸入命令:mysql -u root -p

2.分別執行命令:use mysql; select user,plugin from user where user=’root’; 可以看到當前使用者的加密方式為 caching_sha2_password

3.分別執行命令:ALTER USER ‘test’@’%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER; #修改加密規則 ALTER USER ‘test’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;#修改密碼 FLUSH PRIVILEGES;#重新整理

4.正常連結資料庫

二、使用 mybatis 連線 mysql,丟擲異常

(1)異常資訊:Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is

com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

(2)錯誤原因:資料庫連線驅動的方式不適用,mysql 8.0 以後使用了新的連線方式。

(3)解決方法:使用最新的mysql連線驅動,即將 ‘com.mysql.jdbc.Driver’ 改為 ‘com.mysql.cj.jdbc.Driver’

三、使用 mybatis 查詢資料時候發生異常

(1)異常資訊:java.sql.SQLException: Zero date value prohibited

(2)錯誤原因:主要是由於 zeroDateTimeBehavior 的最終有效值的設定問題,zeroDateTimeBehavior 的值有三個,官方手冊中,三個引數的詳細解釋如下:

exception (the default), which throws an SQLException with an SQLState of S1009. convertToNull, which returns NULL instead of the date. round, which rounds the date to the nearest closest value which is 0001-01-01. http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-installing-upgrading-3-0-to-3-1.html

預設情況為exception,設定這個屬性會丟擲一個SQLException異常,其SQLSate碼為S1009。這個狀態碼在寫儲存過程處理異常時也可以用到。 convertToNull,返回null來替代0000-00-00這樣的日期。 round,將日期轉換為0001-01-01。

(3)解決方法:通過給 jdbc 連結增加zeroDateTimeBehavior引數來解決。如果你的錯誤資訊中有 java.sql.SQLException: Value ‘0000-00-00’ can not be represented as java.sql.Date 這個異常,那麼出現 0000-00-00 屬於一個無效日期,用convertToNull 屬性即可。否則可使用 round,這裡我給出一個新增的參考方式

jdbc:mysql://localhost:3306/seckill?characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=round

四、關於時區問題

(1)異常:mysql 連線時還有可能會報一個時區的問題,如果你的 mysql 未設定時區,可能會報 Time_Zone 的錯誤

(2)解決方式:可以通過新增 serverTimezone 來解決

jdbc:mysql://localhost:3306/seckill?characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=round&serverTimezone=UTC

以上應該就是 mysql 8.0 以上連線的最常見的問題了,還有一個,如果你是 maven 整合的專案,記得要在 pom.xml 中將 mysql 的驅動版本改為你安裝的相對應的 mysql 版本,理論上應該 8.0 以上的版本都是可以的

如果還有新的坑,歡迎留言討論!