一、语法的不同
1、oracle没有offet,limit关键字,所以在oracle中要分页的话,要换成rownum。
2、oracle建表时,没有auto_increment,所有要想让表的主键自增,要自己添加序列。
3、oracle有一个dual表,当select后没有表时,加上的。不加会报错的。select 1 这个在mysql不会报错的,oracle下会。select 1 from dual这样的话,oracle就不会报错了。
4、对空值的判断,name != ""这样在mysql下不会报错的,但是oracle下会报错。在oracle下的要换成name is not null
5、oracle下对单引号,双引号是有要求的,一般不准用双引号,用了会报错(ERROR at line 1: ORA-00904: "t": invalid identifier),而mysql就没有这样的限制。
6、oracle表的字段是number型的,如果你$post得到的参数是123456,入库的时候,你需要用to_number,to_date这样的函数来强制转换一下,不然后会被当成字符串来处理。而mysql却不会。
7、group_concat这个函数,oracle是没有的,如果要想用自已写方法。
8、mysql的用户权限管理,是放到mysql自动带的一个数据库mysql里面的,而oracle是用户权限是根着表空间走的。(这点我感觉要好好理解下)
9、在oracle下用group by的话,group by后面的字段必须在select后面出现,不然会报错的,而mysql却不会。
10、mysql存储引擎有好多,常用的mysiam,innodb等,而创建oracle表的时候,好像只有一个存储引擎。
11、oracle字段无法选择位置,alter table add column before|after,这样会报错的,即使你用sql*plus这样的工具,也没法改字段的位置。
12、oracle的表字段类型也没有mysql多,并且有很多不同,例如:mysql的int,float对应oracle的number类型等。
13、oracle查询时from 表名后面 不能加上as不然会报错的,select t.username from test as t而在mysql下是可以的。
14、oracle中是没有substring这个函数的,mysql是有的。
二、mysql移植到oracle中的表类型转换
MYSQL ORACLE BLOB(220) RAW(220) BLOB (20) RAW(20) BLOG(1024) RAW(1024) VARCHAR(n) VARCHAR2(n) CHAR CHAR FLOAT(22,6) NUMBER(22,6) DOUBLE(44,12) NUMBER(44,12) TINYINT (3) NUMBER(3) SMALLINT(5) NUMBER(5) MEDIUMINT(8) NUMBER(8) INT(10) NUMBER(10) BIGINT(20) NUMBER(20) DATATIME DATA
附录:
参见大神的博客: http://www.cnblogs.com/HondaHsu