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