项目Oracle转Mysql踩坑笔记

最近一段时间,公司准备在现有的项目基础上开发一版单机版的项目。之前项目用的是oracle数据库,考虑到数据库的轻便快捷,所以单机版使用mysql数据库。

所谓好记性不如烂笔头,更何况现在互联网这么发达,所以把转库踩的坑记录下来,以便日后翻阅。

一、项目采用的是springboot,对比下两种数据库的配置文件配置的方式差异:

oracle

mysql

二、常用数据类型和函数的差异

(1)oracle中 varchar2(10)===》mysql中 varcher(10)

需注意的是:mysql中varchar(10)代表可以存放10个汉字,10个字母,或10个数字。oracle中varchar2(10)代表可以中存放10个字节。即oracle中varchar2的长度代表字节数而不是字符数。mysql中一个汉字占三个字节,Oracle中一个汉字占两个字节。

(2)oracle中number类型

number 既可以存浮点,也可以存整数:number(p,s) p默认38位,s指的是小数位数;则要看oracle中存储的具体是什么类型的数据:

1、如果是整型,那么mysql中,用int即可;

2、如果是带小数位的,那么mysql中可用numeric类型。

oracle

mysql

(3)oracle中 clob

CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节

通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便

我们项目中该字段数据量较大,mysql可以使用LONGTEXT

(4)oracle中 to_char(sysdate,'YYMM')函数===》mysql中 date_format(NOW(),'%y%m')

oracle

mysql

三、Jpa 实体类字段与数据库关键字冲突解决

一般情况下实体类字段取名字不建议与数据库关键字重复,但是为了不改动前人代码,也就忍了,但是事情总要解决啊,怎么办呢。

譬如下面,left就是mysql的关键字(天知道前人是怎么想的):

解决:把对应的@Column 改为 @Column(name = “[desc]”) 或者自定义一个其他名字。本人较懒:

四、分页查询的区别

oracle比较繁琐,要借助ROWNUM,而mysql只需使用limit就能解决

五、大小写区分

在oracle中一般情况下不区分大小写;但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。

mysql

解决的办法就是没办法:把mysql的数据库名和oracle的大小写保持一致,表名与应用程序中sql字符串中的表名保持一致,如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。

========世上本无坑,踩的人多了便成了坑!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190103G0U0LF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券