Oracle->mysql碰到的问题

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)。这样永远不会出现保留字引起的问题

时间: 2024-11-03 18:20:55

Oracle->mysql碰到的问题的相关文章

atitit.sql server2008导出导入数据库大的表格文件... oracle mysql

atitit.sql server2008导出导入数据库大的表格文件... 1. 超过80M的文件是不能在查询分析器中执行的 1 2. Oracle ,mysql大的文件导入 1 2.1. 使用sql文件 1 2.2. 使用dmp二进制文件(oracle only) 1 2.3. Other 导出txt,excel在导入( 不推荐),常常不能导入 1 3. 本机导入 1 4. 远程导入 2 5. syaolon msg 2 6. 参考 3 1. 超过80M的文件是不能在查询分析器中执行的 imE

oracle mysql sql serve where in 语句的不同

类似这样的语句在mysql  oracle 是可以执行成功的, select * from classfirst where (classid ,classname) not in (select classid, classname from classfirst where classid=2 ) 但是在sql server 中提示以下错误 消息 4145,级别 15,状态 1,第 1 行在应使用条件的上下文(在 ',' 附近)中指定了非布尔类型的表达式. 所以在日常的使用中对于sql  s

Oracle/Mysql/SqlServer函数区别

mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36|  分类: Mysql技术 |  标签:mysql  sqlsever  oracle  函数   |举报 |字号大中小 订阅 Sql代码 1.类型转换 --Oracle select to_number('123') from dual; --123; select to_char(33) from dual;  --33; select t

Oracle & MySQL 老司机说我们要使用(延迟复制)

最近工作中又遇到生产环境数据库的表被删除的情况,其实这样的事情本不该发生. 几个小建议: 生产环境数据库开发人员只能有查询权限,甚至级别低的开发根本没权限查生产系统,类似表的删除交给专业的DBA来操作,当然有些单位没有所谓的DBA. 专职的DBA基本都具备一个属性,就是每一步的操作都会考虑好后果,所以删除表之前都会有一个备份. 建立审核制度,truncate .drop. rm这样的操作可能是致命的,必须要审核. 可以先rename表,比如把表rename成bak_date_tablename,

Oracle MySQL Server组件Information Schema子组件远程漏洞(CVE-2012-3163)

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购. Oracle MySQL Server组件的实现上存在安全漏洞,通过MySQL协议,已经验证的远程攻击者可利用此漏洞影响下列版本的完整性.可用性.机密性: 5.1.64及更早版本.5.5.26及更早版本 <*来源:Oracle 链接:http://www.oracle.com/technetwork/topics/security/cpuoct2012-1515893.html *

Oracle MySQL Server组件Protocol子组件远程漏洞(CVE-2012-3158)

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购. Oracle MySQL Server组件的实现上存在安全漏洞,通过MySQL协议,未验证的远程攻击者可利用此漏洞影响下列版本的可用性.机密性.完整性: 5.1.64及更早版本.5.5.26及更早版本 <*来源:Oracle 链接:http://www.oracle.com/technetwork/topics/security/cpuoct2012-1515893.html *>

SQLServer Oracle MySQL被恶意软件加密不能使用。

SQLServer Oracle MySQL被恶意勒索病毒加密不能正常使用..mdf.HAPPYCHOOSE.mdf.HAPPYTHREECHOOSE.mdf.jones.mdf.id[DA370A35-2700].[[email protected]].Devos SQLServer,Oracle,MySQL 数据库可以做恢复修复 SQLServer,Oracle,MySQL database can be restored and repaired 1.用新版本的操作系统(PC安装win10

Web项目(原数据库用Oracle)MySql兼容

Oracle与MySql兼容注意的几点: To_char:转换成字符串类型,如:To_char(1234.5, '$9999.9'),结果:$1234.5 To_date:转换成日期类型,如:To_date('1980-01-01', 'yyyy-mm-dd'),结果:01-1月-80 To_number:转换成数值类型,如:To_number('1234.5'),结果:1234.5 (1)date_format(date,'%Y-%m-%d')    -------------->oracle

oracle mysql sqlserver数据库中的分页

oracle: select * from (select rownum r,t1.* from tablename t1 where rownum <M+N ) t2 where t2.r>M; 说明:从tablename表里筛选出从M条记录开始,筛选N条记录. mysql: select * from tablename limit n,m; 说明:从tablename表筛选出,从第n条记录开始,筛选出m条记录. 备注:记录位置从0开始. sqlserver: select top n *

jdbc -- 001 -- 一般方式创建数据库连接(oracle/mysql)

连接数据库步骤: 1. 注册驱动(只做一次) 2. 建立连接(Connection) 3. 创建执行SQL的语句(Statement) 4. 执行语句 5. 处理执行结果(ResultSet) 6. 释放资源举例:public void connectionOracle() throws SQLException{ Connection conn = null; // 数据库连接 PreparedStatement ps = null; // 预编译语句对象 ResultSet rs = nul