Oracle更换为MySQL遇到的问题及解决


Posted in Oracle onMay 21, 2021

迁移工具

测试时,使用powerdesinger进行表结构转换,使用Navicat进行数据导入。 生产环境数据量较大,会由数据组同事选用其他工具进行迁移,到时再行补充。

应用改造

添加mysql8.0驱动包

使用mysql-connector-java-8.0.15.jar,如果是maven管理,直接添加依赖:

<!--MySql 驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.15</version>
			<scope>runtime</scope>
		</dependency>

修改数据源配置

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://host:ip/database?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=password

对象改造

  • 如果使用的hibernate,将配置文件中主键自增的序列删除掉,在mysql中将主键设置为自增;或者为序列创建对应函数。使用mysql集群的话,主键的生成方式还会有改动。
  • 逐条sql检查,特别是mybatis中拼接的sql语句,包括:
    • 主键修改:序列sequence删除,数据库中主键改为自增;或创建对应自增函数
    • 对涉及mysql关键字的字段进行处理,使用``标识
    • 日期格式处理
    • rownum条件查询改为limit条件查询

问题汇总

问题:本地远程连接mysql数据库,报10060登录异常

  • 出现该问题可能的原因:

1、网络不通; 2、服务未启动; 3、防火墙未关闭; 4、服务器上防火墙端口未开放; 5、端口未被监听; 6、权限不足。 我这里是排查发现测试数据库服务器上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出现2059错误

  • 原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
  • 解决办法:更改加密规则
mysql -uroot -ppassword #登录
use mysql; #选择数据库
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新用户密码
FLUSH PRIVILEGES; #刷新权限

问题:使用Navicat迁移数据报错 --> [Err] [Dtf] 1426 - Too-big precision 7 specified for 'TIME_CREATE'. Maximum is 6.

  • 原因:oracle的DATE类型是7位,而mysql的时间类型最多6位,所以无法导入。
  • 解决方法:将oracle库中的DATE改为TIMESTAMP,同时长度改成6 (一定要把类型和长度都修改后才保存),即可导入。

问题:数据迁移中varchar字段插入报错 --> Data too long for column 'DESIGNER' at row 1

  • 原因:Oracle与mysql采用不同的编码集,导致即使相同的字符,存储长度要求也不一样(需进一步深入了解)
  • 解决办法:需要在msyql扩展字段长度

问题:SpringBoot连接mysql报错--> Unknown system variable 'query_cache_size'

  • 原因:使用mysql驱动jar包版本过低,不兼容mysql8.0
  • 解决:使用mysql-connector-java-8.0.15.jar,驱动名换为com.mysql.cj.jdbc.Driver

问题:更改为mysql后,应用前端页面查询中文显示乱码

  • 原因:从数据库、服务器、页面三个维度排查编码格式
    • MySQL数据库编码格式排查
    • 服务器编码格式排查
    • 前端页面编码格式排查

最终发现,是在Navicat连接中,设置了编码格式为utf-8,导致导入的数据在Navicat中看到是正常的,但数据库中是乱码,查询结果也是乱码。这个真的查了好久,没注意到时工具的原因。。

  • 解决办法:重新设置编码格式,导入数据,显示正常

以上就是Oracle换为MySQL遇到的问题及解决的详细内容,更多关于Oracle换为MySQL的资料请关注三水点靠木其它相关文章!

Oracle 相关文章推荐
mybatis使用oracle进行添加数据的方法
Apr 27 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
Oracle以逗号分隔的字符串拆分为多行数据实例详解
Jul 16 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
Oracle安装TNS_ADMIN环境变量设置参考
Nov 01 Oracle
详解Oracle数据库中自带的所有表结构(sql代码)
Nov 20 Oracle
Oracle中update和select 关联操作
Jan 18 Oracle
Oracle数据库中通用的函数实例详解
Mar 25 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
oracle数据库去除重复数据
May 20 Oracle
oracle设置密码复杂度及设置超时退出的功能
Jun 28 Oracle
oracle覆盖导入dmp文件的2种方法
Oracle 区块链表创建过程详解
zabbix agent2 监控oracle数据库的方法
oracle通过存储过程上传list保存功能
May 12 #Oracle
使用springboot暴露oracle数据接口的问题
mybatis使用oracle进行添加数据的方法
Apr 27 #Oracle
Oracle设置DB、监听和EM开机启动的方法
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Django 路由控制的实现代码
2018/11/08 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
python collections模块的使用
2020/10/16 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
小学科学课教学反思
2016/02/23 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python