最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 數(shù)據(jù)類型詳情

 更新時間:2021年11月09日 14:53:46   作者:隨風去遠方  
這篇文章主要介紹了MySQL 數(shù)據(jù)類型,數(shù)值類型分類又分嚴格數(shù)值類型和近似數(shù)值數(shù)據(jù)類型,下面文章圍繞MySQL 數(shù)據(jù)類型展開內(nèi)容,需要的朋友可以參考一下

1、數(shù)值類型

1.1、數(shù)值類型分類

  • 嚴格數(shù)值類型(INTEGER、SMALLINTDECIMAL NUMERIC
  • 近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL DOUBLE PRECISION

MySQL中數(shù)值類型:

整數(shù)類型 字節(jié)  最小值 最大值
TINYINT
1
有符號-128
無符號 0
有符號 127
無符號 255
SMALLINT
有符號-32768
無符號 0
有符號 32767
無符號 65535 
MEDIUMINT 
有符號-8388608
無符號 0
有符號 8388607
無符號 1677215
INT、INTEGER
4
有符號-2147483648
無符號 0 
有符號 2147483647
無符號 4294967295
BIGINT
8
有符號-9223372036854775808
無符號 0
有符號 9223372036854775807
無符號 18446744073709551615
浮點數(shù)類型
字節(jié)
最小值 最大值
FLOAT 
±1.175494351E-38 
±3.402823466E+38 
DOUBLE 
8
±2.2250738585072014E-308 
±1.7976931348623157E+308 
定點數(shù)類型 
字節(jié) 描述
DEC(M,D),
DECIMAL(M,D) 
M+2
最大取值范圍與 DOUBLE 相同,給定 DECIMAL 的有效取值范圍由 M 和 D
決定
位類型 
字節(jié)
最小值 最大值
BIT(M)
1~8 
BIT(1)
BIT(64) 

1.1.1、浮點數(shù)

浮點數(shù)如果不寫精度和標度,則會按照實際精度值顯示,如果有精度和標度,則會自動將四舍五入后的結(jié)果插入,系統(tǒng)不會報錯;定點數(shù)如果不寫精度和標度,則按照默認值 decimal(10,0)來進行操作,并且如果數(shù)據(jù)超越了精度和標度值,系統(tǒng)則會報錯。

1.1.2、位類型

BIT(位)類型:范圍從1-64,如果不寫,默認為1位,對于此字段,直接使用select命令將不會看到結(jié)果,可以用bin()(顯示為二進制格式)或者hex()(顯示為16進制格式)函數(shù)進行讀取

例:

mysql> desc t2;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| id    | bit(1) | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t2 values(1);
Query OK, 1 row affected (0.05 sec)

mysql> select * from t2;
+------+
| id   |
+------+
|     |
+------+
1 row in set (0.00 sec)

mysql> select bin(id),hex(id) from t2;
+---------+---------+
| bin(id) | hex(id) |
+---------+---------+
| 1       | 1       |
+---------+---------+
1 row in set (0.03 sec)

bit類型數(shù)據(jù)插入時,首先將值轉(zhuǎn)換為二進制,如果允許,則進行插入,如果位數(shù)小于實際定義的位數(shù),則插入失敗。

例:如果在剛剛的那張表中插入2,實際轉(zhuǎn)換為二進制為10,超出了bit(1)的實際定義位數(shù),就會報異常,將id定義為bit(2),在插入,就會成功

mysql> insert into t2 values(2);
ERROR 1406 (22001): Data too long for column 'id' at row 1
mysql> alter table t2 modify id bit(2);
Query OK, 1 row affected (0.67 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 values(2);
Query OK, 1 row affected (0.03 sec)

mysql> select bin(id),hex(id) from t2;
+---------+---------+
| bin(id) | hex(id) |
+---------+---------+
| 1       | 1       |
| 10      | 2       |
+---------+---------+
2 rows in set (0.00 sec)

1.1.3、時間日期類型

1.1.3、時間日期類型

日期和時間類型 字節(jié) 最小值 最大值
DATE 
1000-01-01 
9999-12-31 
DATETIME
1000-01-01 00:00:00
9999-12-31 23:59:59 
TIMESTAMP
4
19700101080001 
2038 年的某個時刻 
TIME 
-838:59:59
838:59:59 
YEAR
1 1901
2155 
  • DATE:用來表示年月日
  • DATETIME:用來表示年月日時分秒(支持插入格式:2007-9-3 12:10:10'、'2007/9/3 12+10+10'、'20070903121010'、20070903121010 等)
  • TIME:只用來表示時分秒
  • TIMESTAMP:經(jīng)常插入或者更新日期為當前系統(tǒng)時間
  • YEAR:表示年

例1:創(chuàng)建時間表(dt),字段分別為 date、time、datetime 三種日期類型,并插入數(shù)值,查看顯示結(jié)果

mysql> create table dt(d date,t time,dt datetime);
Query OK, 0 rows affected (0.23 sec)


mysql> insert into dt values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql> select * from dt;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2021-05-13 | 10:14:07 | 2021-05-13 10:14:07 |
+------------+----------+---------------------+
1 row in set (0.00 sec)

 例2:創(chuàng)建測試表t,字段id1為TIMESTAMP類型,插入空值,并顯示

mysql> create table t(id1 timestamp);
Query OK, 0 rows affected (0.22 sec)

mysql> insert into t values(null);
Query OK, 1 row affected (0.05 sec)

mysql> select * from t;
+---------------------+
| id1                 |
+---------------------+
| 2021-05-13 10:18:05 |
+---------------------+
1 row in set (0.00 sec)

可以發(fā)現(xiàn),系統(tǒng)給 id1 自動創(chuàng)建了默認值 CURRENT_TIMESTAMP(系統(tǒng)日期)。(注意,MySQL只給表中的第一個TIMESTAMP字段設(shè)置默認值為系統(tǒng)日期,如果有第二個TIMESTAMP類型,則默認值設(shè)置為0值)

例3:解釋如上說明

mysql> alter table t add column id2 timestamp;
Query OK, 0 rows affected (0.48 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table t \G;
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `id2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR:
No query specified

1.1.4、字符串類型

字符串類型 字節(jié) 描述及存儲需求
CHAR(M) 
M
M 為 0~255 之間的整數(shù)
VARCHAR(M)
 
M 為 0~65535 之間的整數(shù),值的長度+1 個字節(jié)
TINYBLOB
 
允許長度 0~255 字節(jié),值的長度+1 個字節(jié)
BLOB 
 
允許長度 0~65535 字節(jié),值的長度+2 個字節(jié)
MEDIUMBLOB
 
允許長度 0~167772150 字節(jié),值的長度+3 個字節(jié)
LONGBLOB
 
允許長度 0~4294967295 字節(jié),值的長度+4 個字節(jié)
TINYTEXT
 
允許長度 0~255 字節(jié),值的長度+2 個字節(jié) 
TEXT 
 
允許長度 0~65535 字節(jié),值的長度+2 個字節(jié) 
MEDIUMTEXT 
 
允許長度 0~167772150 字節(jié),值的長度+3 個字節(jié)
LONGTEXT 
 
允許長度 0~4294967295 字節(jié),值的長度+4 個字節(jié)
VARBINARY(M)
 
允許長度 0~M 個字節(jié)的變長字節(jié)字符串,值的長度+1 個字節(jié)
BINARY(M) 
M
允許長度 0~M 個字節(jié)的定長字節(jié)字符串 

  • CHAR:固定長度,在檢索時,會刪除尾部的空格
  • VARCHAR:可變長字符串,在檢索時,會保留這些空格

例:

mysql> create table varc(v varchar(4),c char(4));
Query OK, 0 rows affected (0.20 sec)

mysql> insert into varc values('abc ','abc ');
Query OK, 1 row affected (0.03 sec)

mysql> select length(v),length(c) from varc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
|         4 |         3 |
+-----------+-----------+
1 row in set (0.01 sec)
mysql> select concat(v,'+'),concat(c,'+') from varc;
+---------------+---------------+
| concat(v,'+') | concat(c,'+') |
+---------------+---------------+
| abc +         | abc+          |
+---------------+---------------+
1 row in set (0.00 sec)

  •  BINARY:類似于char,但他是二進制字符串
  • VARBINARY:類似于varchar,單他是存儲二進制字符串

例:

mysql> create table bina(c binary(3));
Query OK, 0 rows affected (0.22 sec)

mysql> insert into t set c='a';
ERROR 1054 (42S22): Unknown column 'c' in 'field list'
mysql> insert into bina set c='a';
Query OK, 1 row affected (0.05 sec)

mysql> select *,hex(c),c='a',c='a\0',c='a\0\0' from bina;
+------+--------+-------+---------+-----------+
| c    | hex(c) | c='a' | c='a\0' | c='a\0\0' |
+------+--------+-------+---------+-----------+
| a    | 610000 |     0 |       0 |         1 |
+------+--------+-------+---------+-----------+
1 row in set (0.00 sec)

可以發(fā)現(xiàn),當保存 BINARY 值時,在值的最后通過填充“0x00”(零字節(jié))以達到指定的字段定義長度。從上例中看出,對于一個 BINARY(3)列,當插入時'a'變?yōu)?a\0\0'

1.1.5、ENUM 類型

ENUM:對 1~255 個成員的枚舉需要 1 個字節(jié)存儲;對于 255~65535 個成員,需要 2 個字節(jié)存儲。

例:

mysql> create table gend(gender enum('M','F'));
Query OK, 0 rows affected (0.20 sec)

mysql> insert into gend values('M'),('F'),('1'),(null);
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from gend;
+--------+
| gender |
+--------+
| M      |
| F      |
| M      |
| NULL   |
+--------+
4 rows in set (0.00 sec)

由此可以看出,枚舉類型的插入值得時候,是忽略大小寫的,初始下標從1開始;查詢的時候會轉(zhuǎn)換為大寫,也可以插入空(null)

1.1.6、SET類型

SET:字符串對象,里面可以包含64個成員,成員不同,存儲上也有所不同

1~8 成員的集合,占 1 個字節(jié)。
9~16 成員的集合,占 2 個字節(jié)。
17~24 成員的集合,占 3 個字節(jié)。
25~32 成員的集合,占 4 個字節(jié)。
33~64 成員的集合,占 8 個字節(jié)。
SetEMUN區(qū)別在于,Set一次可以選則多個成員,而ENUM則只能選擇一個

例:

mysql> create table st(col set('a','b','c','d'));
Query OK, 0 rows affected (0.20 sec)

mysql> insert into st values('a,b'),('a,d,a'),('a,c'),('a');
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> insert into st values('f');
ERROR 1265 (01000): Data truncated for column 'col' at row 1
mysql> insert into st values(null);
Query OK, 1 row affected (0.03 sec)

mysql> select * from st;
+------+
| col  |
+------+
| a,b  |
| a,d  |
| a,c  |
| a    |
| NULL |
+------+
5 rows in set (0.00 sec)

由此可以看出,set是可以插入多個成員的,也可以插入null,插入不存在的定義列時,會報異常插入失敗

相關(guān)文章

  • mysql 編碼設(shè)置命令

    mysql 編碼設(shè)置命令

    mysql 編碼設(shè)置命令,需要的朋友可以參考下。
    2009-10-10
  • MySQL主從復(fù)制不一致的原因分析以及解決

    MySQL主從復(fù)制不一致的原因分析以及解決

    這篇文章主要介紹了MySQL主從復(fù)制不一致的原因分析以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • FROM_UNIXTIME 格式化MYSQL時間戳函數(shù)

    FROM_UNIXTIME 格式化MYSQL時間戳函數(shù)

    對MYSQL沒有進行過深入的研究,基礎(chǔ)知識匱乏,一遇到問題只能手冊,看來要把MYSQL的學習安排進時間表了。
    2011-04-04
  • MySQL校對規(guī)則沖突解決方案

    MySQL校對規(guī)則沖突解決方案

    MySQL錯誤1267表明在比較兩個字段時,它們的校對規(guī)則不一致,本文主要介紹了MySQL校對規(guī)則沖突解決方案,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    這篇文章主要介紹了Mysql的慢SQL優(yōu)化思路和規(guī)范詳解,官方介紹索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。更通俗的說,數(shù)據(jù)庫索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫的查詢速度,需要的朋友可以參考下
    2023-05-05
  • MySQL實現(xiàn)分頁查詢的方法

    MySQL實現(xiàn)分頁查詢的方法

    這篇文章介紹了MySQL實現(xiàn)分頁查詢的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • mysql如何讓自增id歸0解決方案

    mysql如何讓自增id歸0解決方案

    數(shù)據(jù)庫的Id自增越來越大,要讓自增重新從1開始:那么就用下面的方法吧
    2012-11-11
  • MySQL5.7慢查詢?nèi)罩緯r間與系統(tǒng)時間差8小時原因詳解

    MySQL5.7慢查詢?nèi)罩緯r間與系統(tǒng)時間差8小時原因詳解

    這篇文章主要介紹了MySQL5.7慢查詢?nèi)罩緯r間與系統(tǒng)時間差8小時原因詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • mysql使用from與join兩表查詢的區(qū)別總結(jié)

    mysql使用from與join兩表查詢的區(qū)別總結(jié)

    這篇文章主要給大家介紹了關(guān)于mysql使用from與join兩表查詢的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • MySQL按時間統(tǒng)計數(shù)據(jù)的方法總結(jié)

    MySQL按時間統(tǒng)計數(shù)據(jù)的方法總結(jié)

    在本篇MYSQL的內(nèi)容里,我們給大家整理了關(guān)于按時間統(tǒng)計數(shù)據(jù)的方法內(nèi)容,有需要的朋友們學習下。
    2019-02-02

最新評論

阿克苏市| 报价| 阜南县| 丁青县| 桐乡市| 大竹县| 平山县| 高阳县| 临汾市| 大石桥市| 青海省| 自贡市| 商河县| 五河县| 颍上县| 丹巴县| 西峡县| 北碚区| 东源县| 淮北市| 伊金霍洛旗| 红河县| 平塘县| 阆中市| 景泰县| 康定县| 莱州市| 黔西| 阿拉善左旗| 都昌县| 剑川县| 宜城市| 报价| 巴青县| 民权县| 类乌齐县| 府谷县| 雷州市| 东山县| 周口市| 百色市|