阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

一分钟看懂 MySQL数据类型

197次阅读
没有评论

共计 3155 个字符,预计需要花费 8 分钟才能阅读完成。

今天在本地装了一个 MySQL 的学习环境,简单的熟悉了一下。准备开始好好学习 MySQL 了。

学习编程语言我都是从数据类型入手。每种编程语言的数据类型都有自己的特点,有点简单,有的种类丰富。

总体感觉而言,MySQL 的数据类型要比 Oracle 丰富的多。用惯了 oracle 中的数据类型,一般 number,varchar2,date 就足够了, 最常用的这 3 个数据类型在 MySQL 就有着巨大的变化,还是有点不适应。

MySQL 中的数据类型都会和你“斤斤计较“, 非常的细致, 都在基本数据类型的范围内。oracle 中的数据类型的维度要广。在 http://www.linuxidc.com/Linux/2014-11/109765.htm 中有过一些简单的总结。

–> 数值类型

类型大小范围(有符号)范围(无符号)用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT 或 INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 字节(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 字节(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值
DECIMAL对 DECIMAL(M,D),如果 M >D,为 M + 2 否则为 D +2依赖于 M 和 D 的值依赖于 M 和 D 的值小数值 

–> 字符类型

类型大小用途
CHAR0-255 字节定长字符串
VARCHAR0-255 字节变长字符串
TINYBLOB0-255 字节不超过 255 个字符的二进制字符串
TINYTEXT0-255 字节短文本字符串
BLOB0-65 535 字节二进制形式的长文本数据
TEXT0-65 535 字节长文本数据
MEDIUMBLOB0-16 777 215 字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 字节中等长度文本数据
LOGNGBLOB0-4 294 967 295 字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 字节极大文本数据 

–> 日期类型

类型大小
(字节)
范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/’838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP81970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值,时间戳 



–> 数值类型
所以在 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
DATENoNo
TIMESTAMPNoYes
TIMESTAMP WITH TIME ZONEExplicitYes
TIMESTAMP WITH LOCAL TIME ZONERelativeYes

顺带说一句,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)   

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137176.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3155字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中