您好,登錄后才能下訂單哦!
這篇文章主要講解了“MySQL驅動mysql-connector-java升級到8.0.X版本問題怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL驅動mysql-connector-java升級到8.0.X版本問題怎么解決”吧!
比MySQL 5.7快2倍,僅這一個理由就夠了,而且還有其他許多很好的新特性:
1. 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負載、IO 密集型工作負載、以及高競爭("hot spot"熱點競爭問題)工作負載。
2. NoSQL:MySQL 從 5.7 版本開始提供 NoSQL 存儲功能,目前在 8.0 版本中這部分功能也得到了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數據庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的 ACID 合規性。
3. 窗口函數(Window Functions):從 MySQL 8.0 開始,新增了一個叫窗口函數的概念,它可以用來實現若干新的查詢方式。窗口函數與 SUM()、COUNT() 這種集合函數類似,但它不會將多行查詢結果合并為一行,而是將結果放回多行當中。即窗口函數不需要 GROUP BY。
4. 隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當對索引進行隱藏時,它不會被查詢優化器所使用。我們可以使用這個特性用于性能調試,例如我們先隱藏一個索引,然后觀察其對數據庫的影響。如果數據庫性能有所下降,說明這個索引是有用的,然后將其“恢復顯示”即可;如果數據庫性能看不出變化,說明這個索引是多余的,可以考慮刪掉。
5. 降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
6. 通用表表達式(Common Table Expressions CTE):在復雜的查詢中使用嵌入式表時,使用 CTE 使得查詢語句更清晰。
7. UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認字符集。
8. JSON:MySQL 8 大幅改進了對 JSON 的支持,添加了基于路徑查詢參數從 JSON 字段中抽取數據的 JSON_EXTRACT() 函數,以及用于將數據分別組合到 JSON 數組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數。
9. 可靠性:InnoDB 現在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現事務完整性了,要么失敗回滾,要么成功提交,不至于出現 DDL 時部分成功的問題,此外還支持 crash-safe 特性,元數據存儲在單個事務數據字典中。
10. 高可用性(High Availability):InnoDB 集群為您的數據庫提供集成的原生 HA 解決方案。
11. 安全性:對 OpenSSL 的改進、新的默認身份驗證、SQL 角色、密碼強度、授權。
到官網,下載MySQL Community Server,這個是日常使用版本,選擇要安裝的操作系統,下載對應的安裝包,下載最新的穩定版本即可。
保留數據SQL腳本,沒有的話導出,可以使用Navicat等工具進行備份。
直接按照普通軟件卸載的方式卸載即可。
8.0和以前比較安裝步驟簡單了許多,一步一步安裝即可。
兼容性還是可以的,目前為止筆者還沒遇到有兼容問題。
雖然網上說會有一點兼容問題,但是還是應該升級,不能因噎廢食,利益明顯大于弊端。當然也要考慮實際情況,最好不要在版本忙碌期間進行,可以選擇一個不是很忙的版本,最為一個事項來做升級,然后進行充分驗證和修改,保證升級后的功能正常。
筆者原來安裝MySQL后,驅動沒升級,使用的mysql-connector-java 5.1.47,驗證功能也沒問題,能夠連接數據庫。
但是一定要升級,升級后使用新的驅動類,無論是啟動加載速度還是數據庫查詢速度性能都有明顯提升。
筆者本地弄了個實例,對比了下,雖然數據量小,差距不明顯,但是還是明顯看到性能提升:
直接下載最新版本jar包或,修改引用的版本號。可以到maven的一些搜索網站(如https://mvnrepository.com/)進行搜索可用版本。
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
1、驅動類變了,原來是由原來的com.mysql.jdbc.Driver改為com.mysql.cj.jdbc.Driver
不修改會影響性能,啟動過程中有告警:
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.
修改后的驅動程序通過SPI自動注冊,通常不需要手動加載驅動程序類。
2、jdbc_url上的時區變為必須配置,否則會啟動報錯
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘?й???’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
如:
jdbc:mysql://localhost:3306/dbname?characterEncoding=utf-8&useSSL=true&serverTimezone=GMT
基本還是兼容的,但是有一些不兼容的地方,目前已經筆者知道的有2點:
1、如果數據庫表自增主鍵id是bigint類型,原來版本執行后返回的id是Long類型,現在改為了BigInteger類型,如果是使用mybatis基本沒問題;如果是自定義的JDBC框架就要格外注意看處理是否有問題,類型是否存在不匹配導致問題。
2、日期類型的字段處理可能存在問題,如表中字段為TIMESTAMP,之前查詢返回能夠返回毫秒值,升級后不再返回。如果在查詢時有使用日期轉換函數轉換為String,并且對毫秒值進行了處理,那么升級后會報錯,需要去掉對毫秒值得處理。如果查詢返回直接映射為Date就沒問題。
感謝各位的閱讀,以上就是“MySQL驅動mysql-connector-java升級到8.0.X版本問題怎么解決”的內容了,經過本文的學習后,相信大家對MySQL驅動mysql-connector-java升級到8.0.X版本問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。