一分钟看懂 MySQL数据类型(2)



-->数值类型
所以在oracle我们常使用的number,基本可以使用int来代替了。
在oracle中通过number能够控制数据的精度,比如我们制定Number(2),那么你如果数值过界了,就会直接报错。支持的数据范围精度也很高。可能在MySQL中会基于数据类型有对应的存储特性吧。
SQL> create table test (id number(2));
Table created.
SQL> insert into test values(127);
insert into test values(127)
                        *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


在MySQL中尝试,按照tinyint的最大值127,我们输入128,会直接插入127,没有报错,有警告。

mysql> create table test(id tinyint);
Query OK, 0 rows affected (0.07 sec)

mysql> insert into test values(128);
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> select*from test;
+------+
| id   |
+------+
|  127 |
+------+
1 row in set (0.00 sec)

-->字符类型
关于这个数据类型,对于varchar2是最不适应了。MySQL的varchar类型和oracle的varchar2使用是类似的。一个不同支持是MySQL支持的字符长度要小一些,只有256字节。

mysql中varchar(6)代表可以存放6个汉字,6个字母,或6个数字。
oracle中varchar2(6)代表可以中存放6个字节。采用utf8编码,oracle中一个汉字占用3个字节。

对于lob类型,最大支持长度和oracle一致。都是4G的样子。MySQL中分得比较细,比较灵活。
-->日期类型
对于日期类型,可能Oracle支持得更广一些,类型分得更细。考虑了timezone的部分。不过大部分使用来说基本没什么差别,我目前还没有用到timezone相关的数据类型。

DatatypeTime ZoneFractional Seconds
DATE   No   No  
TIMESTAMP   No   Yes  
TIMESTAMP WITH TIME ZONE   Explicit   Yes  
TIMESTAMP WITH LOCAL TIME ZONE   Relative   Yes  


顺带说一句,oracle和mysql中都可以使用current_date,current_timestamp。
SQL> select current_date from dual;
CURRENT_DATE
------------------
17-DEC-14

SQL> select current_date from dual; select current_date from dual;  --oracle中不能并行运行两个查询
select current_date from dual; select current_date from dual
                             *
ERROR at line 1:
ORA-00911: invalid character


mysql> select current_date;select current_date;  --mysql里面就可以很轻巧的实现
+--------------+
| current_date |
+--------------+
| 2014-12-17   |
+--------------+
1 row in set (0.00 sec)


+--------------+
| current_date |
+--------------+
| 2014-12-17   |
+--------------+
1 row in set (0.00 sec)   

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8ba99c5066ff6268ddc1dbf4ed8be0ee.html