本文主要给大家介绍Mysql迁移到Oracle简析,文章内容都是笔者用心摘选和编辑的,Mysql迁移到Oracle简析具有一定的针对性、对大家的参考意义还是比较大的、下面跟笔者一起了解下主题内容吧。
,
1。数据类型的选择。
数值类型:
Mysql有两种类型的数字:整数(整数)和实数(实数)。
存储整数可以选择:非常小的整数,短整型,MEDIUMINT, INT,长整型数字,,分别对应8、16、24、32、64位存储空间。他们可存储的范围从2的N - 1次方到2的N - 1次方1,其中N是存储空间的位数。
整数类型有可选的无符号属性,表示不允许负的值,这大致可以使正数的上限提高一倍。例如非常小的整数,无符号可以存储的范围是0 ~ 255,而非常小的整数的存储范围是128 - 127。
实数是带有小数部分的数字.DECIMAL类型用于存储精确的小数。因为额外的计算和开销,应该尽量只是在对小数进行精确计算时才使用。在数据量比较大时,可以考虑用长整型数字代替小数。
,
相比较而言,甲骨文有号码,int,浮动,binary_float, binary_double,数字类型
数量类型在Oracle中会占用0 ~ 22个字节的存储空间,是一种变长数据类型,采用Oracle内部算法,是一种软数据类型,因此具有较好的数据精确度,通用性和可移植性较强
其中如下的这些类型都是数量从类型映射而来。
数字(p, s):完全映射至数(p, s)。如果p未指定,则默认为38。
小数(p, s)或12月(p, s):完全映射至数(p, s)。如果p为指定,则默认为38
整数或int:完全映射至数量(38)类型。
SMALLINT:完全映射至数量(38)类型
由于存储结构上的不同,binary_float和binary_double较数字,可以存储更大范围的数据,但是其精度并不如号码。如果存储金融数据,建议使用号码。
而如果进行科学运算,建议使用binary_float和binary_double,因为浮点型数据使用的是硬件计算,其计算效率是非常高的。
对于Mysql中的各种int类型,建议统一都对应到甲骨文的数量类型。(数量(p, s)也是完全映射到数字类型的,所以无需设置精度)
字符类型:
Mysql使用VARCHAR和CHAR两种类型。
VARCHAR是变长类型
字符是定长类型
CHAR这类定长类型,会删除所有末尾的空格,在数据存储和比较的时候,某些行为就难以理解。所以正常选择VARCHAR为好。
,
甲骨文中CHAR属于定长类型会使用空格进行填充。
而varchar2采用变长的方式存储数据,相对会节省空间。在存储效率上,与字符不相上下。
另外字符类型同样存在末尾空格的问题。
对于Oracle类型,由于工作习惯以及存储的要求来考虑,应该尽可能的选择varchar2。
,
2. Mysql中分隔符的作用
该关键字是告诉解释器,该段命令是否已经结束,Mysql是否可以执行后续脚本。
DELIMITER ; DROP PROCEDURE  IF EXISTS  p_contract;,,,该语句可以立即执行 DELIMITER $ $,,,,,,并没有以分号结束,后续语句等待遇到$ $时执行。 CREATE PROCEDURE  p_contract () ,才能开始 。。。。。。 。。。。。 ,,,最终获得$ $,,,,执行中间的语句。 DELIMITER ;
3。声明继续处理程序没有找到
若没有数据返回,程序继续,并将变量IS_FOUND设为0,这种情况是出现在选择XX向XXX,表名的时候发生的。
4. UNIX时间戳与日期的相互转换
Mysql中日期以及时间函数,推荐你可以看一下这篇文章:http://www.cnblogs.com/redfox241/archive/2009/07/23/1529092.html
,
甲骨文获取UTC时间:
select to_char (sys_extract_utc (systimestamp) & # 39; yyyy-mm-dd hh34: mi: ss # 39;),得到,双,,,,,,,UTC时间
,
Mysql中UNIX时间戳与日期的相互转换
UNIX时间戳转换为日期用函数:FROM_UNIXTIME ()
选择FROM_UNIXTIME (1410318106),
日期转换为UNIX时间戳用函数:UNIX_TIMESTAMP ()
选择UNIX_TIMESTAMP (& # 39; 2014-09-10 11:01:46& # 39;);
, DATE_FORMAT (FROM_UNIXTIME (& # 39; 1410318106 & # 39; & # 39; Y % - % - % d % h: % m: % & # 39;), & # 39; Y - % - % d %, % h: % m: % & # 39;)
甲骨文并没有这类的转换函数,需要自己写(如下的写法也来自网络)
,
<>之前,甲骨文时间日期型转换为UNIX时间戳 replace  create ,或是;function  bill_query.oracle_to_unix (in_date 日期),return number 开始 ,, ,才能返回(,(in_date -TO_DATE(& # 39; 19700101 & # 39; & # 39;名称# 39;))* 86400,安康;TO_NUMBER (SUBSTR (TZ_OFFSET (sessiontimezone), 1, 3)) * 3600); 最终获得oracle_to_unix;/猆nix时间戳转换为甲骨文时间 replace  create ,或是;function  bill_query.unix_to_oracle (in_number 编号),return date 开始 ,,,, ,,,返回(TO_DATE(& # 39; 19700101 & # 39; & # 39;名称# 39;),+,in_number/86400, + TO_NUMBER (SUBSTR (TZ_OFFSET (sessiontimezone), 1, 3))/24); 最终获得unix_to_oracle;/