网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库的ORA-00257故障解决.
.Oracle9i初始化参数中文说明(6).
.Oracle数据库技术(37).
.Oracle 数据库管理脚本命名.
./initrd目录的作用和当删除时出现.
.在一台机器配置两个listener.
.Oracle 9i产品文档.
.自动调整 Oracle9i Database:Or.
.oracle10g初始化参数说明一.
.使用Oracle9i数据库的注意事项.
.Oracle 数据库缓冲区溢出漏洞.
.Oracle中优化SQL的原则.
.Oracle数据库监听配置.
.如何从SQLServer到Oracle实现服务.
.获得Oracle各内存段的内部信息(.
.Linux 网管 123 --- 组态 X Win.
.通过实例来教你如何配置Oracle监.
.创建表时考虑列的顺序.
.Oracle10G中的回收站的详细说明如.
.oracle 10g flashback table.

oracle移植到mysql注意事项

发表日期:2008-2-9


  客户用的数据库是mysql,而研发好的产品支持Oracle,为了让客户掏腰包,我们必须把数据库环境从oracle转向mysql。我们在转换的过程中碰到了下面一些问题,希望能给同样遭遇的同仁们一些借鉴。假如我们在最初的设计、编码过程中注重数据库的移植性,这种情况下可以完全不需要作额外工作。   一、数据库环境从oracle转向mysql碰到的问题。   因为逻辑不变,所以原则是不改应用程序代码,只改数据库表的创建/初始化sql。下面是我们碰到的问题以及解决办法。   1、 大小写敏感的区别(假如服务器OS是Linux)。   在oracle中一般情况下不区分大小写。有时候我们在使用oracle不注重大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:insert into tableName 和 insert into TABLENAME效果是一样的,用工具导出创建/数据初始化脚本,得到的结果一般表名和字段名转化成了大写。   但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,使用数据库或表实际上是操纵这些文件(夹),所以使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在以linux为内核的操作系统中是大小写敏感的。   解决的办法是把mysql的数据库名和oracle的大小写保持一致,表名与应用程序中sql字符串中的表名保持一致,假如应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。假如你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。   2、保留字的区别。   像sql语言的函数名(如:inteval,show)等是保留字。Oracle中保留字是可以作为表名和字段名,并且不影响使用,但mysql中保留字是不能作为表名和字段名,假如使用会报语法错误。   解决办法,把sql语句中的保留字用‘`’符号引起来,这个符号位于键盘的tab键上面;假如是字段名还有另外一种方法tablename.字段名。像这样:insert into tablename (id, `interval`) value(….. 或insert into tablename (id, tablename.inteval) value(….. 。   3、数据类型的区别。   在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,当然在oracle中没有mysql的time类型。   解决办法是替换。   4、自动增长类型的区别。   Oracle有sequence,mysql中没有,但有auto_increment属性。   解决办法是把Oracle中sequence转换成使用auto_increment属性,某些情况可能还有一种办法可以解决问题,新建一个独立的表用来专门记录自动增长型的数据。   5、索引长度限制的区别。   从MySQL 4.1.2开始,MyISAM和InnoDB表索引长度支持1000字节,也就是说索引字段的长度不能超过1000字节,假如超过会报这样的错:ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes。假如是UTF-8编码,相当于333个字符的长度(因为UTF8一个字符占3个字节)。Oracle的索引长度限制比mysql要宽松得多。   解决的办法就不必要多说了,要么改索引的定义,要么改字段的定义长度。   二、为了数据库的兼容性我们应该注重些什么。   数据库的兼容性应该是数据库设计应该重视的一个问题,因为有时候客户存在已经在用的数据库,并且不希望同时维护两个数据库,这样的话兼容多种数据库还能成为产品的一个卖点。   作到数据库的兼容性要害是遵守标准用法。   1、 遵守标准用法,尽量不使用某种数据库特有的用法。   如msyql的‘`’符号的用法,   再比如,很多人有这种用法,在使用oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL;,然后把查询得到的值作为value插入表中,这种用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,假如需要使用就应该完全地使用。   再举个例子,不同的数据库对分页查询作了扩展,postgresql有offset,limit,oracle就没有。   2、 避免数据库大小写敏感的问题。   选择数据库表名和字段名采用大写还是小写,并且在数据库的设计和编码过程中完全统一。   3、 保留字。   要求数据库设计者尽量不使用保留字作表名和字段名。也有很多人有这种用法,在表名和字段名前加‘_’,像这样:create table _tablename ( _id integer)。这样永远不会出现保留字引起的问题。

上一篇:细化解析:Oracle 10g ASM 的一点经验 人气:820
下一篇:在 Python环境下连接Oracle数据库的具体步骤 人气:780
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐