Orcale转Mysql参考标准

Orcale转Mysql参考标准

数值类型

Mysql: 

(1)整数类型:

Tinyint(4) 1字节(-2^7, 2^8-1), Bingint(20) 8字节,(-2^63, 2^64-1) ,Smallint(6) 2字节,(-2^15, 2^16-1) ,Int(11) 4字节,(-2^31, 2^32-1) ,Mediumint(8) 3字节, (-2^23, 2^24-1)

(2)浮点类型:

Decimal(m,n),Numeric(m,n) 这里m表示整数位长度,n表示小数点位数. DECIMAL(4, 1)可以存-999.9到9999.9 ;

Float单精度浮点数 ;Double双精度浮点数 

Oralce:

Oracle使用NUMBER来存储数字。这个内部格式精度可以高达38位。如:

NUMBER (precision, scale)

precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。

scale表示数字小数点右边的位数,scale默认设置为0.

BINARY_FLOAT,BINARY_DOUBLE没NUMBER精确

字符串类型
Mysql:

   CHAR(M) [BINARY],VARCHAR(M)[BINARY](BINARY指是否区分大小MySQL要求一个行的定义长度不能超过65535;gbk,每个字符最多占2个字节,最大长度不能超过32766;utf8,每个字符最多占3个字节,最大长度不能超过21845。)

        ENUM、SET (ENUM('value1','value2',...)枚举。一个仅有一个值的字符串对象,这个值选自于值列表。一个 ENUM 最多能有 65535 不同的值。

SET('value1','value2',...) 一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表中选出。一个 SET 最多能有 64 个成员。)

BLOB、 TEXT(BLOB 是一个能保存可变数量的数据的二进制的大对象TEXT 是一个大小写不敏感的 BLOB。)

Orcale:

    Oracle 中有 4 种基本的字符串类型,分别是 CHAR、VARCHAR2、NCHAR 和 NVARCHAR2。其中,CHAR(n)是定长,不足n位则补空格,VARCHAR2(n)是变长。 VARCHAR2 中存储的字节数上界是 4,000。

Length()函数注意问题!

MYSQL中对CHAR类型字段执行length()函数,取出的值是不算空格的值长度。

而在ORACLE里面,取的是字段长度,是有包含了空格的值。

例如,test表里面A字段为char(6),某行数据为'abc'。

Mysql中,length(A)取出的值为3。

oracle中,length(A)取出的值为6。

NULL和空字符串问题!

       MySQL里面NULL和一个空字符串是不一样的东西。

例如,下列语句是完全不同的:

mysql> INSERT INTO my_table (phone) VALUES (NULL);

mysql> INSERT INTO my_table (phone) VALUES ("");

SELECT * FROM my_table  WHERE  phone IS NULL;

--只返回第一条数据

SELECT * FROM my_table  WHERE phone = "";

--返回第二条数据

但是,在ORACLE中略有不同。对char和varchar2字段来说, ’’就是NULL;

SELECT * FROM my_table  WHERE phone IS NULL;

--返回两条数据

SELECT * FROM my_table  WHERE phone = ‘’;

--返回空

 

日期类型

Mysql:

     Date(“1000-01 -01”to“9999 -12- 31”  就是一个字符串的别名。获取日期的时候需要对字符串进行解析。允许2008-00-00,'0000-00-00 00:00:00'这种情况出现。)

Year(1901 to 2155)

Timestamp(19700101000000” to 2037 年的某个时刻如果表中其他字段变化,此类型的字段自动更新为当前系统时间。插null的话,也会自动插入当前时间。

Time(“ 838:59:59”to“838:59:59” )

Datetime(“1000-01 -01 00:00:00” to“9999- 12-31 23:59:59” )

Orcale:

    Date类型:是一个 7 字节的定宽日期/时间数据类型,精确到秒。日期类型没有所谓的格式,日期就是日期,只有在显示的时候可以指定转换成的字符串的格式。绝对不会允许2008-00-00这种情况出现。对于日期转换为另一个日期相对比较简单,比如select trunc(sysdate) from dual;即可获得不包含时间的日期。

TIMESTAMP 类型:与 DATE 非常类似,只不过另外还支持小数秒和时区

日期函数差异

获取当前时间:

   Mysql:

mysql> select now();

mysql> select sysdate();

mysql> select curdate();

mysql> select current_date;

mysql> select curtime();

mysql> select current_time;

   Ocrale:

         SQL> select sysdate from dual;

毫秒级别:

SQL> select current_timestamp from dual;

日期格式化:

   Mysql:

     mysql> select date_format(now(),"%Y-%m-%d"); 2014-06-24

mysql> select date_format(now(),"%y-%c-%e"); 14-6-24

mysql> select time_format(now(),'%H:%i:%S'); 16:43:47

mysql> select time_format(now(),'%h-%i-%S'); 04-43-47

        Orcale:

             select to_char(sysdate,'yyyy-mm-dd') from dual;

select to_char(sysdate,'hh24-mi-ss')   from dual;

简单日期加减:

       Mysql:

            1、加一天 

mysql> select date_add(now(),interval 1 day);

mysql> select now()+interval 1 day;

2、加一个月 

mysql> select date_add(now(),interval 1 month);

mysql>select now()+interval 1 month;

 

       Orcale:

1、加一天

            SQL> select sysdate+1 from dual;

2、加一个月 

SQL> select add_months(sysdate,1) from dual;

复杂日期加减: 

Mysql:

         mysql> select date_add("1997-12-31 23:59:59",interval "1:1" minute_second);

mysql> select date_sub("1998-01-01 00:00:00",interval "1 1:1:1"day_second);

mysql> select date_sub("1998-01-01 00:00:00",interval "1 0:2"  day_minute);

Orcale:

to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错。

即按照第二个参数的格式解释第一个参数。

to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。

 

    1、上月末天:

SQL> select to_char(add_months(last_day (sysdate),-1),'yyyy-MM-dd') LastDay from dual;

2、上月今天 

SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;

语法差异

        修改表名:

Mysql:

mysql> alter table t rename t1;或 mysql> alter table T1 rename to  T;

Orcale:

SQL> alter table T rename to T1

  修改列名或类型 :

        Mysql:

        Mysql> alter table tbl_name change old_col_name new_col_name type;

Mysql> alter table tbl_name modify col_name type;

Orcale:

SQL> alter table tbl_name rename columnold_col_name to  col_name;

SQL> alter table tbl_name modify col_name type; 

新增删除列 :

       Mysql:

       Mysql> alter table tbl_name add col_name type;

Mysql> alter table tbl_name drop col_name;

Orcale:

SQL> alter table tbl_name add col_name type;

SQL> alter table tbl_name drop column col_name;

查询索引:

Mysql:

Mysql> show index from tbl_name ;

Orcale:

SQL> select index_name,table_name from user_indexes;

记录返回记录条数:

          Mysql:

Mysql> select * from t limit n, m; (表示n+1条开始,取m条记录,m等于-1表示到最后面的记录 )

Mysql> select * from tbl_name limit 5;

或者

Mysql> select * from tbl_name limit 0,5;

         Oracle:

          SQL> select * from tbl_name where rownum<5;

分页查询:

           Mysql:

           Mysql> select * from t limit 20,80;( 第21行到100行,总共80条记录 )

           Orcale:

           SQL> select * from (select row_.*, rownum rownum_from (yourSqlHere )row_where rownum <= 100)where rownum_ > 20;

查找连接杀掉连接:

          Mysql:

            Mysql> SHOW FULL PROCESSLIST;

Mysql> KILL ID;

Orcale:

Sql>Select * from v$session;

Sql>alter system kill session ‘SID,SERIAL#’;

大小写敏感问题

         Orcale:

               在oracle里面表名和字段是忽略大小写,字段值是区分大小写的

Mysql:

    表名:数据库和表名在Windows下大小写不敏感,而在大多数类型的 Unix/Linux系统中是大小写敏感的。

列名:在所有情况下都是忽略大小写的。

字段的值:MySql默认查询(字符串)是不区分大小写的,如果需要区分,必须在建表的时候用Binary标示敏感的属性。

          CREATE TABLE NAME( name VARCHAR(10) BINARY);

 

Mysql字符集 

MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和校准规则(Collation)。校准规则是指在同一字符集内字符之间的比较规则;

MySQL对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头,以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;

MySQL自增属性 

AUTO_INCREMENT

   在系统开发过程中,我们经常要用到唯一编号。

在MySQL中可通过设置数据列的AUTO_INCREMENT属性来自动生成。

   指定了AUTO_INCREMENT的列必须要建索引,不然会报错,索引可以为主键索引,当然也可以为非主键索引。(不一定要做主键)

mysql> create table t4 (id int auto_increment);

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

下面的定义把t5表的主键定义为了name,而非自增的id字段

mysql> create table t5 (id int auto_increment,

name varchar(20) primary key,key(id));

Query OK, 0 rows affected (0.01 sec)

注意事项:

• (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。

• (2)把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。

• (3)当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

• mysql> insert into t5 (id,name) values (null,'test');

• Query OK, 1 row affected (0.00 sec)

•     

• mysql> select * from t5;

• +----+------+

• | id | name |

• +----+------+

• |  2 | test |

• +----+------+

• 1 row in set (0.00 sec)

• 上面语句等同于下面语句:

• mysql> insert into t5 (name) values ('test'); 

• (4)当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,

情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。换句话说,就是自增字段可以跳过一些编号。

• (5)如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

其它差别

1,oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了。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有to_number,to_date这样的转换函数,oracle表字段是number型的,如果你$_POST得到的参数是123456,入库的时候,你还要to_number来强制转换一下,不然后会被当成字符串来处理。而mysql却不会。

7,group_concat这个函数,oracle是没有的,如果要想用自已写方法。

8,mysql的用户权限管理,是放到mysql自动带的一个数据库mysql里面的,而oracle是用户权限是根着表空间走的。

9,group by,在下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有的。Orcale转Mysql参考标准

数值类型

Mysql: 

(1)整数类型:

Tinyint(4) 1字节(-2^7, 2^8-1), Bingint(20) 8字节,(-2^63, 2^64-1) ,Smallint(6) 2字节,(-2^15, 2^16-1) ,Int(11) 4字节,(-2^31, 2^32-1) ,Mediumint(8) 3字节, (-2^23, 2^24-1)

(2)浮点类型:

Decimal(m,n),Numeric(m,n) 这里m表示整数位长度,n表示小数点位数. DECIMAL(4, 1)可以存-999.9到9999.9 ;

Float单精度浮点数 ;Double双精度浮点数 

Oralce:

Oracle使用NUMBER来存储数字。这个内部格式精度可以高达38位。如:

NUMBER (precision, scale)

precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。

scale表示数字小数点右边的位数,scale默认设置为0.

BINARY_FLOAT,BINARY_DOUBLE没NUMBER精确

字符串类型

   Mysql:

        CHAR(M) [BINARY],VARCHAR(M)[BINARY](BINARY指是否区分大小MySQL要求一个行的定义长度不能超过65535;gbk,每个字符最多占2个字节,最大长度不能超过32766;utf8,每个字符最多占3个字节,最大长度不能超过21845。)

        ENUM、SET (ENUM('value1','value2',...)枚举。一个仅有一个值的字符串对象,这个值选自于值列表。一个 ENUM 最多能有 65535 不同的值。

SET('value1','value2',...) 一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表中选出。一个 SET 最多能有 64 个成员。)

BLOB、 TEXT(BLOB 是一个能保存可变数量的数据的二进制的大对象TEXT 是一个大小写不敏感的 BLOB。)

Orcale:

      Oracle 中有 4 种基本的字符串类型,分别是 CHAR、VARCHAR2、NCHAR 和 NVARCHAR2。其中,CHAR(n)是定长,不足n位则补空格,VARCHAR2(n)是变长。 VARCHAR2 中存储的字节数上界是 4,000。

Length()函数注意问题!

MYSQL中对CHAR类型字段执行length()函数,取出的值是不算空格的值长度。

而在ORACLE里面,取的是字段长度,是有包含了空格的值。

例如,test表里面A字段为char(6),某行数据为'abc'。

Mysql中,length(A)取出的值为3。

oracle中,length(A)取出的值为6。

NULL和空字符串问题!

       MySQL里面NULL和一个空字符串是不一样的东西。

例如,下列语句是完全不同的:

mysql> INSERT INTO my_table (phone) VALUES (NULL);

mysql> INSERT INTO my_table (phone) VALUES ("");

SELECT * FROM my_table  WHERE  phone IS NULL;

--只返回第一条数据

SELECT * FROM my_table  WHERE phone = "";

--返回第二条数据

但是,在ORACLE中略有不同。对char和varchar2字段来说, ’’就是NULL;

SELECT * FROM my_table  WHERE phone IS NULL;

--返回两条数据

SELECT * FROM my_table  WHERE phone = ‘’;

--返回空

 

日期类型

Mysql:

     Date(“1000-01 -01”to“9999 -12- 31”  就是一个字符串的别名。获取日期的时候需要对字符串进行解析。允许2008-00-00,'0000-00-00 00:00:00'这种情况出现。)

Year(1901 to 2155)

Timestamp(19700101000000” to 2037 年的某个时刻如果表中其他字段变化,此类型的字段自动更新为当前系统时间。插null的话,也会自动插入当前时间。

Time(“ 838:59:59”to“838:59:59” )

Datetime(“1000-01 -01 00:00:00” to“9999- 12-31 23:59:59” )

Orcale:

        Date类型:是一个 7 字节的定宽日期/时间数据类型,精确到秒。日期类型没有所谓的格式,日期就是日期,只有在显示的时候可以指定转换成的字符串的格式。绝对不会允许2008-00-00这种情况出现。对于日期转换为另一个日期相对比较简单,比如select trunc(sysdate) from dual;即可获得不包含时间的日期。

TIMESTAMP 类型:与 DATE 非常类似,只不过另外还支持小数秒和时区

日期函数差异

    获取当前时间:

         Mysql:

mysql> select now();

mysql> select sysdate();

mysql> select curdate();

mysql> select current_date;

mysql> select curtime();

mysql> select current_time;

      Ocrale:

            SQL> select sysdate from dual;

毫秒级别:

SQL> select current_timestamp from dual;

日期格式化:

        Mysql:

     mysql> select date_format(now(),"%Y-%m-%d"); 2014-06-24

mysql> select date_format(now(),"%y-%c-%e"); 14-6-24

mysql> select time_format(now(),'%H:%i:%S'); 16:43:47

mysql> select time_format(now(),'%h-%i-%S'); 04-43-47

        Orcale:

             select to_char(sysdate,'yyyy-mm-dd') from dual;

select to_char(sysdate,'hh24-mi-ss')   from dual;

简单日期加减:

       Mysql:

            1、加一天 

mysql> select date_add(now(),interval 1 day);

mysql> select now()+interval 1 day;

2、加一个月 

mysql> select date_add(now(),interval 1 month);

mysql>select now()+interval 1 month;

 

       Orcale:

1、加一天

            SQL> select sysdate+1 from dual;

2、加一个月 

SQL> select add_months(sysdate,1) from dual;

复杂日期加减: 

Mysql:

         mysql> select date_add("1997-12-31 23:59:59",interval "1:1" minute_second);

mysql> select date_sub("1998-01-01 00:00:00",interval "1 1:1:1"day_second);

mysql> select date_sub("1998-01-01 00:00:00",interval "1 0:2"  day_minute);

Orcale:

to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错。

即按照第二个参数的格式解释第一个参数。

to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。

 

    1、上月末天:

SQL> select to_char(add_months(last_day (sysdate),-1),'yyyy-MM-dd') LastDay from dual;

2、上月今天 

SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;

语法差异

        修改表名:

Mysql:

mysql> alter table t rename t1;或 mysql> alter table T1 rename to  T;

Orcale:

SQL> alter table T rename to T1

  修改列名或类型 :

        Mysql:

        Mysql> alter table tbl_name change old_col_name new_col_name type;

Mysql> alter table tbl_name modify col_name type;

Orcale:

SQL> alter table tbl_name rename columnold_col_name to  col_name;

SQL> alter table tbl_name modify col_name type; 

新增删除列 :

       Mysql:

       Mysql> alter table tbl_name add col_name type;

Mysql> alter table tbl_name drop col_name;

Orcale:

SQL> alter table tbl_name add col_name type;

SQL> alter table tbl_name drop column col_name;

查询索引:

Mysql:

Mysql> show index from tbl_name ;

Orcale:

SQL> select index_name,table_name from user_indexes;

记录返回记录条数:

          Mysql:

Mysql> select * from t limit n, m; (表示n+1条开始,取m条记录,m等于-1表示到最后面的记录 )

Mysql> select * from tbl_name limit 5;

或者

Mysql> select * from tbl_name limit 0,5;

         Oracle:

          SQL> select * from tbl_name where rownum<5;

分页查询:

           Mysql:

           Mysql> select * from t limit 20,80;( 第21行到100行,总共80条记录 )

           Orcale:

           SQL> select * from (select row_.*, rownum rownum_from (yourSqlHere )row_where rownum <= 100)where rownum_ > 20;

查找连接杀掉连接:

          Mysql:

            Mysql> SHOW FULL PROCESSLIST;

Mysql> KILL ID;

Orcale:

Sql>Select * from v$session;

Sql>alter system kill session ‘SID,SERIAL#’;

大小写敏感问题

         Orcale:

               在oracle里面表名和字段是忽略大小写,字段值是区分大小写的

Mysql:

    表名:数据库和表名在Windows下大小写不敏感,而在大多数类型的 Unix/Linux系统中是大小写敏感的。

列名:在所有情况下都是忽略大小写的。

字段的值:MySql默认查询(字符串)是不区分大小写的,如果需要区分,必须在建表的时候用Binary标示敏感的属性。

          CREATE TABLE NAME( name VARCHAR(10) BINARY);

 

Mysql字符集 

MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和校准规则(Collation)。校准规则是指在同一字符集内字符之间的比较规则;

MySQL对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头,以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;

MySQL自增属性 

AUTO_INCREMENT

   在系统开发过程中,我们经常要用到唯一编号。

在MySQL中可通过设置数据列的AUTO_INCREMENT属性来自动生成。

   指定了AUTO_INCREMENT的列必须要建索引,不然会报错,索引可以为主键索引,当然也可以为非主键索引。(不一定要做主键)

mysql> create table t4 (id int auto_increment);

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

下面的定义把t5表的主键定义为了name,而非自增的id字段

mysql> create table t5 (id int auto_increment,

name varchar(20) primary key,key(id));

Query OK, 0 rows affected (0.01 sec)

注意事项:

• (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。

• (2)把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。

• (3)当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

• mysql> insert into t5 (id,name) values (null,'test');

• Query OK, 1 row affected (0.00 sec)

•     

• mysql> select * from t5;

• +----+------+

• | id | name |

• +----+------+

• |  2 | test |

• +----+------+

• 1 row in set (0.00 sec)

• 上面语句等同于下面语句:

• mysql> insert into t5 (name) values ('test'); 

• (4)当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,

情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。换句话说,就是自增字段可以跳过一些编号。

• (5)如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

其它差别

1,oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了。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有to_number,to_date这样的转换函数,oracle表字段是number型的,如果你$_POST得到的参数是123456,入库的时候,你还要to_number来强制转换一下,不然后会被当成字符串来处理。而mysql却不会。

7,group_concat这个函数,oracle是没有的,如果要想用自已写方法。

8,mysql的用户权限管理,是放到mysql自动带的一个数据库mysql里面的,而oracle是用户权限是根着表空间走的。

9,group by,在下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有的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值