溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是MySQL的數(shù)據(jù)類型

發(fā)布時間:2020-05-27 13:53:59 來源:網(wǎng)絡 閱讀:215 作者:三月 欄目:MySQL數(shù)據(jù)庫

不知道大家之前對類似什么是MySQL的數(shù)據(jù)類型的文章有無了解,今天我在這里給大家再簡單的講講。感興趣的話就一起來看看正文部分吧,相信看完什么是MySQL的數(shù)據(jù)類型你一定會有所收獲的。

一、概述:

MySQL數(shù)據(jù)庫中的數(shù)據(jù)大致可以分為以下幾類,從而實現(xiàn)數(shù)據(jù)庫在操作的時候對不同類型的處理。對數(shù)據(jù)庫分類的優(yōu)點主要有以下幾種:

1、使系統(tǒng)能夠根據(jù)數(shù)據(jù)類型來操作數(shù)據(jù)

2、預防數(shù)據(jù)運算的時候出錯

通過分類,可以將每個類型不特定的行為聯(lián)系在一起執(zhí)行這些行為時,數(shù)據(jù)分類將有效避免不同類型數(shù)據(jù)之間的錯誤,做場見的是字符串數(shù)字相加。

3、更見有效的利用空間。

4、定義數(shù)據(jù)類型實際是定義表中的列

二、數(shù)據(jù)庫類型的分類

數(shù)據(jù)庫的分類可以分為數(shù)值類型,字符型,日期型、文本型TEXT及復合型。

2.1 數(shù)值型

2.1.1 整型

tinyint(-127~128之間的整數(shù))

smallint(短整型:(-32768~32767)數(shù)值占用2字節(jié), 用帶符號的二進制整數(shù)形式存儲)

mediumint

auto_increment(自增長類型)

row num

int (整型默認為11個字節(jié))

bigint(大整型)

Population

舉例:

創(chuàng)建表包含以上類型,且每個字段中均輸入99999999數(shù)值,并查看

mysql> insert into mydata values(99999999,999999999,99999999,999999999,999999999);
ERROR 1264 (22003): Out of range value for column 'id1' at row 1
提示id1,報錯
mysql> select * from mydata;
+------+--------+--------+-----------+-----------+
| id1  | id2    | id3    | id4       | id5       |
+------+--------+--------+-----------+-----------+
|  127 | -32768 |  65535 | 999999999 | 999999999 |
|  127 | -32768 | 655356 | 999999999 | 999999999 |
+------+--------+--------+-----------+-----------+

在MySQL5.5及以上版本之后各個字段類型數(shù)字超出長度限制則均不能創(chuàng)建成功;

mysql> insert into mydata(id1) values('NIHAO');
ERROR 1366 (HY000): Incorrect integer value: 'NIHAO' for column 'id1' at row 1

類型不同的數(shù)據(jù)也限制執(zhí)行插入操作

類型直接均可使用int(n)這里的n則是對整型數(shù)據(jù)的長度進行限制,n的最大值為255

2.2 整型修飾符:

unsigned 無符號整數(shù),修飾符:規(guī)定字段只能保存正的數(shù)據(jù)。其可以增大這個字段正整數(shù)的支持范圍。

zerofill 規(guī)定0填充(默認是空格)填補輸出的值,使用這個值可以防止MySQL存儲負值。

例如:超時會員卡編號

No 0000000000000001
mysql> create table mydata2(id int(10) unsigned zerofill);
Query OK, 0 rows affected (0.14 sec)
mysql> insert into mydata2 values(1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from mydata2;
+------------+
| id         |
+------------+
| 0000000001 |
+------------+
1 row in set (0.00 sec)
mysql>


2.2 浮點型數(shù)值

float(單精度),double(雙精度),decimal(精度確定)

float和dobule是浮點數(shù),數(shù)值越大與不精確

Decimal是定點數(shù),常用來存儲財務工資方面,具備高精度

float(5,2):表示字段有限長度是5位,其中整數(shù)部分為3位,小數(shù)部分為2位,小數(shù)點超出部分則執(zhí)行四舍五入,其占用4個字節(jié)

double:8個字節(jié)村粗

decimal:用來存儲精度的小數(shù),消耗空間,運算較慢??梢允褂胋igint替代。

8762435.543 mm=x*1000 = 8762435543
select mm/1000 from tb_name;
mysql> create table mydata3(tb float(4,1),td double(5,2),tc decimal(5,2));
Query OK, 0 rows affected (0.09 sec)
mysql> insert into mydata3 values(45.6789,45.6789,45.6789);
Query OK, 1 row affected, 1 warning (0.08 sec)
mysql> select * from mydata3;
+------+-------+-------+
| tb   | td    | tc    |
+------+-------+-------+
| 45.7 | 45.68 | 45.68 |
+------+-------+-------+
1 row in set (0.00 sec)
mysql>

三、字符串類型

3.1字符串類型比較

char(n)

n:存儲固定長度,在括號中自定長度其最大值為255;

varchar(n)

n:存儲變長,在括號內指定最大長度其最大值為255,如果大于255則需要使用TEXT類型

TEXT

TEXT類型存放最大長度為65535個字符串。


3.2 三種類型優(yōu)缺點:

char較varchar占用空間,但效率高

char:固定長度,插入數(shù)據(jù)必須小于指定的長度否則自動截斷(適用于mysql版本低于5.5的版本,大等于該版本的將不能插入數(shù)據(jù))。

varchar:長度動態(tài),會導致數(shù)據(jù)遷移增加IO壓力


字符串類型修飾符:

binary:區(qū)分字符大小寫。

舉例:

mysql> create table mychar1(ca char(10),va varchar(10));
mysql> insert into mychar1 values('1234567890111','1234567890111');
ERROR 1406 (22001): Data too long for column 'ca' at row 1
字符過長無法插入報錯

不同存儲引擎使用不同用法:

MyISAM表:建議使用char類型

InnoDB表:由于其數(shù)據(jù)內部存儲格式對固定長度的數(shù)據(jù)行和可變長度的數(shù)據(jù)行不加區(qū)分,素有使用varchar可以減少磁盤空間用量和尖山磁盤I/O。


TEXT類型:

TEXT類型及其子類型用于存儲比較長的非二進制字符串:

TEXT不區(qū)分大小寫

四、復合類型

ENUM:枚舉類型,只能取一個

SET:set類型可以取多個


例子:

Query OK, 1 row affected (0.00 sec)
mysql> create table mychar(sex enum('M','W'));
Query OK, 0 rows affected (0.11 sec)
mysql> insert into mychar values('M');
Query OK, 1 row affected (0.01 sec)
mysql> create table mychar2(type set('a','b','c','d'));
Query OK, 0 rows affected (0.14 sec)
mysql> insert into mychar2 values('a,b,d');
mysql> select * from mychar2;
+-------+
| type  |
+-------+
| a,b,d |
+-------+

說明:enmu:最多有65535個元素,從1開始索引為0,表示錯誤值或nouu,


五、時間日期型:

5.1 date類型

格式:YYYY-MM-DD

支持范圍:1000-01-01到9999-12-31

mysql> create table mydate(dd date);

Query OK, 0 rows affected (0.06 sec)

mysql> insert into mydate values('2017-09-10'),(20180910);

5.2 time類型

mysql> create table mydate1(tt time);
Query OK, 0 rows affected (0.15 sec)
mysql> insert into mydate1 values('100101');
Query OK, 1 row affected (0.01 sec)
mysql> select * from mydate1;
+----------+
| tt       |
+----------+
| 10:01:01 |
+----------+
1 row in set (0.00 sec)


5.3 year類型

00-69:轉為2000-2069 70-79轉為:1970-1999

1970Unix誕生記為計算機元年

例子:

mysql> create table mydate2(yy year);
Query OK, 0 rows affected (0.14 sec)
mysql> insert into mydate2 values('2015'),(01),(9),(69),(2080);
Query OK, 5 rows affected (0.08 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> select * from mydate2;
+------+
| yy   |
+------+
| 2015 |
| 2001 |
| 2009 |
| 2069 |
| 2080 |
+------+
5 rows in set (0.00 sec)

5.4 datetime類型和time stamp類型

datetime類型timestamp類型

datetime類型能保存大范圍的值,從1001年到9999年,精度為秒,它把日期和時間封裝到格式為YYYY-MM-DD HH:MM:SS的整數(shù)中,與時區(qū)無關,使用8個字節(jié)的存儲空間

timestamp類型保存了從1970年1月1日午夜(格林尼治時間) 以來的秒數(shù)

它和linux時間戳相同,timestamp只使用了4個字節(jié)的存儲空間,因此它的范圍比datetime小的多,只能表示從1970-2038,通常我們還是用它的,提高空間利用率

舉例:

mysql> create table mydate3(dt datetime);
Query OK, 0 rows affected (0.21 sec)
mysql> insert into mydate3 values('11111111111111')
    -> ;
Query OK, 1 row affected (0.00 sec)
mysql> select * from mydate3;
+---------------------+
| dt                  |
+---------------------+
| 1111-11-11 11:11:11 |
+---------------------+
1 row in set (0.00 sec)
插入當前時間
mysql> insert into mydate4 values(now());
Query OK, 1 row affected (0.01 sec)

看完什么是MySQL的數(shù)據(jù)類型這篇文章,大家覺得怎么樣?如果想要了解更多相關,可以繼續(xù)關注我們的行業(yè)資訊板塊。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI