客户用的数据库是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的位图索引),同义词在MySQL中可能需要通过别名来实现,游标和约束的语法也存在差异。 六、SQL语句的调整 由于...
**数据库兼容性注意事项**: 为了提高数据库的兼容性,开发者应遵循以下原则: 1. **遵守标准SQL**:尽量避免使用特定数据库的特殊语法,如MySQL的反引号。这将有助于确保代码在不同数据库系统间具有更好的可移植...
总之,Oracle到MySQL的数据移植是一项复杂的工作,涉及到多个层面的技术问题,包括但不限于数据类型映射、数据转换、数据库结构的重构以及后期的测试和维护。通过使用专业工具和遵循适当的迁移流程,可以有效地降低...
Oracle 数据库作为一款广泛使用的商业关系型数据库管理系统,常常需要与其他数据源进行数据交互,特别是在构建数据仓库时,从多个数据源向Oracle移植数据是一项常见任务。以下将详细解释如何从不同类型的数据库和...
Java JDBC(Java Database Connectivity)是Java语言...以上内容涵盖了Java通过JDBC连接Oracle和MySQL数据库的基础知识,以及相关的操作和注意事项。在实际开发中,了解并熟练运用这些知识,能够有效地进行数据库操作。
四、数据移植注意事项 1. **数据类型匹配**:不同数据库系统的数据类型可能不完全相同,需要在移植过程中进行转换。 2. **权限与角色**:移植时要考虑源数据库和目标数据库的角色、权限设置,确保移植后数据的访问...
#### 四、注意事项 1. **数据类型兼容性**:在进行MySQL数据抽取至HBase的过程中,需要注意数据类型的兼容性问题。例如,如果MySQL中某一列为`VARCHAR`类型,则在HBase中应对应一个相应的列簇。 2. **性能优化**...
6. 注意事项: - 确保驱动版本与Oracle数据库服务器版本匹配,否则可能会出现兼容性问题。 - 关闭连接:使用完数据库连接后,记得关闭`Connection`、`Statement`和`ResultSet`,避免资源泄漏。 - 安全性:避免在...
同时,由于是针对 Windows 32 位环境,文档会特别关注该平台上的注意事项和特定问题。 “www.pudn.com.txt”文件可能是下载来源的记录或者说明,而“mysql”可能是另一个相关文件或子目录,可能包含了 MySQL 的某些...
6. **注意事项**:由于Oracle已经停止对`System.Data.OracleClient`的更新,推荐使用Oracle官方的ODP.NET(Oracle Data Provider for .NET)来替代,以获得更好的性能和兼容性。ODP.NET分为Managed Driver和...
6. **安全注意事项**:在实际部署中,确保遵循最佳实践,例如限制对数据库的访问权限,使用预编译的SQL语句防止SQL注入,以及定期备份数据库。 综上所述,"php7mysql插件"在CentOS上的安装和使用是LAMP环境中一个...
5. **使用注意事项**: - **备份数据**:在进行任何重大操作(如升级、修改结构)前,务必先备份数据,以防意外丢失。 - **定期维护**:包括定期检查和优化数据库,监控资源使用,及时调整参数以保证性能。 - **...
在DB2中,移植可能涉及到不同版本之间的升级,或是从其他数据库系统如Oracle、MySQL等向DB2的迁移。关键步骤包括数据库结构分析、数据转换、应用代码调整和测试验证。 2. **数据库转换**:转换更侧重于数据的格式、...
**安全性注意事项** 随着安全标准的提高,MySQL Connector/J也不断强化了安全性。使用时,应避免硬编码数据库凭据,并启用SSL连接以加密通信,防止中间人攻击。 综上所述,MySQL Connector/J是Java开发MySQL数据库...
### 四、注意事项 1. **驱动版本兼容性**:确保所使用的Oracle JDBC驱动与数据库服务器版本兼容。 2. **异常处理**:示例代码中使用了`try-catch`块来捕获可能出现的异常,这对于调试和维护是非常重要的。 3. **...
4. **安全注意事项** 虽然免安装版MySQL便于使用,但也需要注意安全问题。因为没有安装过程,可能默认的安全设置并不完善,比如弱密码或未限制的远程访问。因此,用户在启动前应确保已设置了强壮的root密码,并限制...
标题中的“数据库管理移植工具”指的是一个用于迁移或同步数据库数据的应用程序,它可能支持多种数据库系统,如MySQL、Oracle、SQL Server等。这个版本号"201306010"可能代表该工具的发布日期或者内部版本编号,意味...
6. **注意事项** - 安装和配置:在使用ZEOSDBO前,可能需要安装对应的数据库驱动,例如MySQL的ODBC驱动或JDBC驱动。 - 错误处理:编写代码时应考虑异常处理,捕捉可能的数据库错误。 - 性能优化:合理使用连接池...
1. **移植能力**:SRedMigration支持多种数据库系统的迁移,包括但不限于SQL Server、Oracle、MySQL等,能够实现不同数据库之间的无缝切换。 2. **智能分析**:工具能自动分析源数据库结构,包括表、视图、存储过程...
在操作MySQL时,有一些基本的指令和注意事项。MySQL指令包括环境切换、查看状态、退出等,而SQL指令则涉及数据库定义、查询、操纵和授权。需要注意的是,虽然大部分指令不区分大小写,但密码和变量值是区分大小写的...