最近在做“去O”(去除Oracle数据库)的相关工作,需要将Oracle表结构转换成MySQL的表结构。这里面最重要的一点就是字段数据类型的变化。

1.ORACLE常用的数据类型与MySQL的对应关系

2.Oracle 中 varchar2(N) 与 varchar2(N char) 的区别

varchar(N)中是可以存储N个字节,而varchar(N char)是可以存储N个字符。

(对于UTF-8数据集来说:中文占两个字节,而英文占一个字节)

1、varchar2(N):可以存储N byte长度,与字符数无关;例如varchar2(3),可以存储3个byte长度,如'啊a'、'aaa',与字符数无关;

2、varchar2(N char):可以存储N个字符(包括字母和汉字),与字节(byte)长度无关;例如varchar2(3 char),可以存储3个字符(包括字母和汉字),如'啊啊啊'、'aaa'、'啊aa',与字节(byte)长度无关;

说明:对于字符集为UTF-8的MySQL数据库,varchar(10)不区分中英文,可以存储10个中文汉字,或者10个字母或数字。所以从Oracle的Varchar2类型转换成varchar类型,长度保持不变即可满足。

3.number数值类型转化

最复杂莫过于number(p,s),以这个举例来说明如何转换。

p是指有效位数,s是小数位,需要以p和s的实际取值来确定mysql的字段类型:

当p,s均为空时,此时需要参考表内的实际数值或者根据具体业务来确定转换的类型。参考实际数值时,可以采用获取表中max(length(column_name))-1(包含一个小数点)来确定p,用max(length(column_name)-instr(column_name ||'.','.'))(查找小数点后的位数)来确定s的值。

另外,一定要注意MySQL的int(2)这种写法,并不是smallint的别名,不管是int(2)还是int(8),实际都是int。 

4.其他注意事项

除了最复杂的number类型以外,其他字段还有几点小建议:

(1)、除非要修改设计以支持秒以下级别的精度,Date最好转换为datetime而不要转为TIMESTAMP,因为TIMESTAMP存在2038年问题。

(2)、ORACLE FLOAT不要转为MYSQL FLOAT,要转为DOUBILE避免精度丢失。

(3)、处理char时,要注意最大的长度。

(4)、BLOB,CLOB转换时,MYSQL也有众多不同长度的类型选择,最好根据实际业务需要和业务数据来判断选择何种长度。

Oracle迁移到MySQL时数据类型转换问题的更多相关文章

  1. 从Oracle迁移到MySQL的各种坑及自救方案

    当企业内部使用的数据库种类繁杂时,或者有需求更换数据库种类时,都可能会做很多数据迁移的工作.有些迁移很简单,有些迁移可能就会很复杂,大家有没有考虑过为了顺利完成复杂的数据库迁移任务,都需要考虑并解决哪 ...

  2. Oracle迁移到MySQL性能下降的注意点(转)

    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障.在我的记忆里面淘宝最初从Oracle ...

  3. Web系统从Oracle迁移至MySQL

    前两天领导给了个活,数据库迁移,原来的系统是用的Oracle数据库,现在要改成MySql,当时没多想就接下来了,原来的系统用的框架式SSI,于是大概想了下需要作调整无非以下几点 第一 数据库迁移 第二 ...

  4. 使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

    有时候我们有迁移数据库的需求,例如从Oracle迁移到SQL Server,或者从MySQL迁移到Oracle. 很多江湖好汉一时不知如何手工操作,所幸的是Navicat提供了迁移的自动化操作界面. ...

  5. 怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

    有时候我们有迁移数据库的需求,例如从Oracle迁移到SQL Server,或者从MySQL迁移到Oracle. 很多江湖好汉一时不知如何手工操作,所幸的是Navicat提供了迁移的自动化操作界面. ...

  6. 适用MySQL Migration Toolkit 1.0 将oracle迁移到mysql中遇到的问题

    这里主要说一下我在适用中碰到的问题,主要过程参考 http://www.cnblogs.com/duwenlei/p/3520759.html. 首先启动MySQLMigrationTool.exe ...

  7. oracle 迁移到 mysql(结构和数据)

    1下载MySQL Migration Toolkit 2安装:jdk-6u38-ea-bin-b04-windows-amd64-31_oct_2012.exe 3下载ojdbc14.jar 具体地址 ...

  8. 从Oracle迁移到Mysql之前必须知道的50件事

    1. 对子查询的优化表现不佳. 2. 对复杂查询的处理较弱 3. 查询优化器不够成熟 4. 性能优化工具与度量信息不足 5. 审计功能相对较弱 6. 安全功能不成熟,甚至可以说很粗糙.没有用户组与角色 ...

  9. InterBase数据库迁移到MySQL(数据导入)

    在这个脚本中我使用的是Python的ORM框架SQLAlchemy来连接远程的MySQL数据库的,在写这个脚本的时候为了方便参数的输入,我就给之前和这个脚本添加了一个新的功能,就是在调用这个脚本的时候 ...

  10. Oracle 迁移某用户的数据到Sql Server

    准备条件: 1.Oracle11g数据库 2.Sql Server 2008 3.Microsoft SQL Server Migration Assistant for Oracle 步奏如下: 1 ...

随机推荐

  1. liunx上升级python2至python3

    一.背景介绍 虚拟机的liunx系统CentOS7自带了python2.7.5,为使用方便需要换成最新的版本3.10.4 二.安装方法 1.安装升级GCC yum install -y gcc* op ...

  2. RL 基础 | 如何搭建自定义 gym 环境

    需实现的方法: __init__(self): 需定义 action_space 和 observation_space,使用 space.Box 之类来表示(from gym import spac ...

  3. 基于python的视频点播网站(python+django+vue开发的视频点播网站-视频管理系统)

    演示地址 前台地址: http://video.gitapp.cn 后台地址:http://video.gitapp.cn/admin 后台管理帐号: 用户名:admin123 密码:admin123 ...

  4. 银河麒麟安装多版本gcc的方式方法

    银河麒麟安装多版本gcc的方式方法 背景 最近想升级一下gcc 但是发现自己编译的话非常麻烦 记得之前CentOS7的时候有一个scl的处理 发现CentOS8 已经没有scl的仓库了 简单验证了一下 ...

  5. TiKV占用内存超过的解决过程

    TiKV占用内存超过的解决过程 背景 为了后去TiDB的极限数据. 晚上在每台服务器上面增加了多个TiKV的节点. 主要方式为: 每个NVME的硬盘增加两个TiKV的进程. 这样每个服务器两个磁盘, ...

  6. [转帖]Kafka—配置SASL/PLAIN认证客户端及常用命令

    https://www.jianshu.com/p/c1a02fb1779f 介绍   SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证 ...

  7. [转帖] jq命令用法总结

    https://www.cnblogs.com/codelogs/p/16324928.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 如果说要给Li ...

  8. 申威3231服务器Redis性能验证-及最全信创CPU性能分析

    申威3231服务器Redis性能验证-及最全信创CPU性能分析 背景 公司里面新进了几台服务器. 有台申威服务器. 因为前段时间参与过一次申威的POC验证. 当时对性能有一点简单的理解. 但是因为不方 ...

  9. [转帖] Strace的介绍与使用

    https://www.cnblogs.com/skandbug/p/16264609.html Strace简介 strace命令是一个集诊断.调试.统计于一体的工具,常用来跟踪进程执行时的系统调用 ...

  10. 我们开源了一个轻量的 Web IDE UI 框架

    我们开源了一个轻量的 Web IDE UI 框架 Molecule 一个轻量的 Web IDE UI 框架 简介 Molecule 是一个受 VS Code 启发,使用 React.js 构建的 We ...