目錄
- 遷移工具
- 應(yīng)用改造
- 添加mysql8.0驅(qū)動包
- 修改數(shù)據(jù)源配置
- 對象改造
- 問題匯總
- 問題:本地遠(yuǎn)程連接mysql數(shù)據(jù)庫,報10060登錄異常
- 問題:Navicat 連接MySQL8出現(xiàn)2059錯誤
- 問題:使用Navicat遷移數(shù)據(jù)報錯 --> [Err] [Dtf] 1426 - Too-big precision 7 specified for 'TIME_CREATE'. Maximum is 6.
- 問題:數(shù)據(jù)遷移中varchar字段插入報錯 --> Data too long for column 'DESIGNER' at row 1
- 問題:SpringBoot連接mysql報錯--> Unknown system variable 'query_cache_size'
- 問題:更改為mysql后,應(yīng)用前端頁面查詢中文顯示亂碼
遷移工具
測試時,使用powerdesinger進(jìn)行表結(jié)構(gòu)轉(zhuǎn)換,使用Navicat進(jìn)行數(shù)據(jù)導(dǎo)入。 生產(chǎn)環(huán)境數(shù)據(jù)量較大,會由數(shù)據(jù)組同事選用其他工具進(jìn)行遷移,到時再行補(bǔ)充。
應(yīng)用改造
添加mysql8.0驅(qū)動包
使用mysql-connector-java-8.0.15.jar,如果是maven管理,直接添加依賴:
!--MySql 驅(qū)動 -->
dependency>
groupId>mysql/groupId>
artifactId>mysql-connector-java/artifactId>
version>8.0.15/version>
scope>runtime/scope>
/dependency>
修改數(shù)據(jù)源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://host:ip/database?useUnicode=truecharacterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=password
對象改造
- 如果使用的hibernate,將配置文件中主鍵自增的序列刪除掉,在mysql中將主鍵設(shè)置為自增;或者為序列創(chuàng)建對應(yīng)函數(shù)。使用mysql集群的話,主鍵的生成方式還會有改動。
- 逐條sql檢查,特別是mybatis中拼接的sql語句,包括:
- 主鍵修改:序列sequence刪除,數(shù)據(jù)庫中主鍵改為自增;或創(chuàng)建對應(yīng)自增函數(shù)
- 對涉及mysql關(guān)鍵字的字段進(jìn)行處理,使用``標(biāo)識
- 日期格式處理
- rownum條件查詢改為limit條件查詢
問題匯總
問題:本地遠(yuǎn)程連接mysql數(shù)據(jù)庫,報10060登錄異常
1、網(wǎng)絡(luò)不通; 2、服務(wù)未啟動; 3、防火墻未關(guān)閉; 4、服務(wù)器上防火墻端口未開放; 5、端口未被監(jiān)聽; 6、權(quán)限不足。 我這里是排查發(fā)現(xiàn)測試數(shù)據(jù)庫服務(wù)器上3306端口未開放原因。
sudo vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
sudo service iptables restart
sudo iptables -L -n
問題:Navicat 連接MySQL8出現(xiàn)2059錯誤
- 原因:mysql8之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password
- 解決辦法:更改加密規(guī)則
mysql -uroot -ppassword #登錄
use mysql; #選擇數(shù)據(jù)庫
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新用戶密碼
FLUSH PRIVILEGES; #刷新權(quán)限
問題:使用Navicat遷移數(shù)據(jù)報錯 --> [Err] [Dtf] 1426 - Too-big precision 7 specified for 'TIME_CREATE'. Maximum is 6.
- 原因:oracle的DATE類型是7位,而mysql的時間類型最多6位,所以無法導(dǎo)入。
- 解決方法:將oracle庫中的DATE改為TIMESTAMP,同時長度改成6 (一定要把類型和長度都修改后才保存),即可導(dǎo)入。
問題:數(shù)據(jù)遷移中varchar字段插入報錯 --> Data too long for column 'DESIGNER' at row 1
- 原因:Oracle與mysql采用不同的編碼集,導(dǎo)致即使相同的字符,存儲長度要求也不一樣(需進(jìn)一步深入了解)
- 解決辦法:需要在msyql擴(kuò)展字段長度
問題:SpringBoot連接mysql報錯--> Unknown system variable 'query_cache_size'
- 原因:使用mysql驅(qū)動jar包版本過低,不兼容mysql8.0
- 解決:使用mysql-connector-java-8.0.15.jar,驅(qū)動名換為com.mysql.cj.jdbc.Driver
問題:更改為mysql后,應(yīng)用前端頁面查詢中文顯示亂碼
- 原因:從數(shù)據(jù)庫、服務(wù)器、頁面三個維度排查編碼格式
- MySQL數(shù)據(jù)庫編碼格式排查
- 服務(wù)器編碼格式排查
- 前端頁面編碼格式排查
最終發(fā)現(xiàn),是在Navicat連接中,設(shè)置了編碼格式為utf-8,導(dǎo)致導(dǎo)入的數(shù)據(jù)在Navicat中看到是正常的,但數(shù)據(jù)庫中是亂碼,查詢結(jié)果也是亂碼。這個真的查了好久,沒注意到時工具的原因。。
- 解決辦法:重新設(shè)置編碼格式,導(dǎo)入數(shù)據(jù),顯示正常
以上就是Oracle換為MySQL遇到的問題及解決的詳細(xì)內(nèi)容,更多關(guān)于Oracle換為MySQL的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- 詳解Mysql和Oracle之間的誤區(qū)
- SpringBoot多數(shù)據(jù)庫連接(mysql+oracle)的實(shí)現(xiàn)
- 詳解MySQL實(shí)時同步到Oracle解決方案
- MySQL版oracle下scott用戶建表語句實(shí)例
- mysql、oracle默認(rèn)事務(wù)隔離級別的說明
- MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應(yīng)關(guān)系說明
- mysql和oracle的區(qū)別小結(jié)(功能性能、選擇、使用它們時的sql等對比)
- mysql類似oracle rownum寫法實(shí)例詳解
- 淺談Mysql、SqlServer、Oracle三大數(shù)據(jù)庫的區(qū)別