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

最全mysql數(shù)據(jù)類型梳理匯總

 更新時(shí)間:2022年07月20日 15:09:52   作者:公號(hào)運(yùn)維家???????  
這篇文章主要介紹了最全mysql數(shù)據(jù)類型梳理匯總,??mysql??支持多種數(shù)據(jù)類型,主要有數(shù)值類型、日期與時(shí)間類型以及字符串類型,更多相關(guān)內(nèi)容需要的朋友可以參考一下

整數(shù)類型

數(shù)值型數(shù)據(jù)類型主要用來(lái)存儲(chǔ)數(shù)字,mysql提供了多種數(shù)值數(shù)據(jù)類型,不同的數(shù)據(jù)類型提供不同的取值范圍,可以存儲(chǔ)的值范圍越大,其所需要的存儲(chǔ)空間也會(huì)越大。

mysql主要提供的整數(shù)類型有TINYINT、SMALLINT、MEDIUMINT、INTBIGINT。整數(shù)類型的屬性字段可以添加AUTO_INCREMENT自增約束條件。

看下下面兩個(gè)表;

  • 表一:mysql中的整數(shù)型數(shù)據(jù)類型
  • 表二、mysql不同整數(shù)類型的取值范圍

舉個(gè)例子:

year int(4);

該聲明指明,在year字段中的數(shù)據(jù)一般只顯示4位數(shù)字的寬度;

注意點(diǎn):顯示寬度和數(shù)據(jù)類型取值范圍是無(wú)關(guān)的。顯示寬度只是指明mysql最大可能顯示的數(shù)字個(gè)數(shù),數(shù)值的位數(shù)小于指定的寬度時(shí)會(huì)由空格填充;如果插入了大于顯示寬度的值,只要該值不超過(guò)該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來(lái)。

例如:向year字段插入一個(gè)數(shù)值12345,當(dāng)使用select查詢?cè)摿兄档臅r(shí)候,mysql顯示的將是完整的帶有5位數(shù)字的12345,而不是4位數(shù)字的值。

其他整數(shù)型數(shù)據(jù)類型也可以在定義表結(jié)構(gòu)時(shí)指定所需要的顯示寬度,如果不指定,則系統(tǒng)為每一種類型指定默認(rèn)的寬度。

不同的整數(shù)類型有不同的取值范圍,并且需要不同的存儲(chǔ)空間,因此應(yīng)該根據(jù)實(shí)際需要選擇最合適的類型,這樣有利于提高查詢的效率和節(jié)省存儲(chǔ)空間。整數(shù)類型是不帶小數(shù)部分的數(shù)值,現(xiàn)實(shí)生活中很多地方都需要用到帶小數(shù)的數(shù)值。下面我們就來(lái)介紹下小數(shù)類型。

注意點(diǎn):顯示寬度只用于顯示,并不能限制取值范圍和占用空間。

浮點(diǎn)數(shù)類型和定點(diǎn)數(shù)類型

mysql中使用浮點(diǎn)數(shù)和定點(diǎn)數(shù)來(lái)表示小數(shù)。

浮點(diǎn)數(shù)類型有兩種:

  • 單精度浮點(diǎn)類型(FLOAT)
  • 雙精度浮點(diǎn)類型(DOUBLE)

定點(diǎn)數(shù)類型只有一種:

  • DECIMAL

浮點(diǎn)數(shù)類型和定點(diǎn)數(shù)類型都可以用(M,N)來(lái)表示。其中呢,我們用M稱為精度,表示總共的位數(shù);N稱為標(biāo)度,表示小數(shù)的位數(shù)。

DECIMAL類型不同于FLOATDOUBLEDECIMAL實(shí)際是以串存放的,可能的最大取值范圍和DOUBLRE一樣,但是其有效的取值范圍由MD的值來(lái)決定。怎么說(shuō)呢?

如果改變M而固定D,則其取值范圍將隨著M的變大而變大。

那么在mysql中,浮點(diǎn)數(shù)類型和定點(diǎn)數(shù)類型的取值范圍有多大呢?

幾乎正常業(yè)務(wù)情況下是不可能用完的,因?yàn)樗麄兊娜≈捣秶缦拢?/strong>

FLOAT類型的取值范圍:

  • 有符號(hào)的取值范圍:-3.402823466E+38 ~-1.175494351E-38
  • 無(wú)符號(hào)的取值范圍:0和1.175494351E-38 ~3.402823466E+38

DOUBLE類型的取值范圍:

  • 有符號(hào)的取值范圍:-1.7976931348623157E+308 ~-2.2250738585072014E-308
  • 無(wú)符號(hào)的取值范圍:0和2.2250738585072014E-308~ 1.7976931348623157E+308

注意點(diǎn):無(wú)論是定點(diǎn)數(shù)還是浮點(diǎn)數(shù)類型,如果用戶指定的精度超出精度范圍,則會(huì)四舍五入。

可能有點(diǎn)繞,舉個(gè)栗子吧:

創(chuàng)建一個(gè)數(shù)據(jù)表為yunweijia_1,字段類型如下;

mysql> create table yunweijia_1 (x float(5,1), y double(5,1), z decimal(5,1));
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql>

然后我們?cè)谶@個(gè)表中插入一條數(shù)據(jù),sql語(yǔ)句如下:

mysql> insert into yunweijia_1 values (6.66, 7.77, 8.888);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql>

看上面的提示信息,是不是在我們執(zhí)行插入語(yǔ)句的時(shí)候,給了一個(gè)警告信息,然后我們來(lái)看下這個(gè)警告信息是什么吧;

mysql> show warnings;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'z' at row 1 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql>

可以看到他提示說(shuō),z字段在插入的時(shí)候被截?cái)嗔耍?code>x和y截?cái)嗑蜎](méi)有提出警告。

那么查看下結(jié)果吧:

mysql> select * from yunweijia_1;
+------+------+------+
| x | y | z |
+------+------+------+
| 6.7 | 7.8 | 8.9 |
+------+------+------+
1 row in set (0.00 sec)
mysql>

可以看到分別都進(jìn)行了四舍五入,這點(diǎn)需要注意。

FLOATDOUBLE在不指定精度操作時(shí),默認(rèn)會(huì)按照實(shí)際的精度(由計(jì)算機(jī)硬件和操作系統(tǒng)決定),DECIMAL若不指定精度則默認(rèn)為(10,0);

浮點(diǎn)數(shù)相對(duì)于定點(diǎn)數(shù)的優(yōu)點(diǎn)是在長(zhǎng)度一定的情況下,浮點(diǎn)數(shù)能夠表示更大的數(shù)據(jù)范圍;他的缺點(diǎn)是會(huì)引起精度問(wèn)題;

注意點(diǎn):mysql中,定點(diǎn)數(shù)以字符串形式存儲(chǔ),在對(duì)精度要求比較高的時(shí)候,使用DECIMAL的類型比較好,另外,兩個(gè)浮點(diǎn)數(shù)進(jìn)行減法和比較運(yùn)算時(shí),容易出現(xiàn)問(wèn)題,所以在使用浮點(diǎn)數(shù)時(shí)需要注意,并盡量避免做浮點(diǎn)數(shù)比較。

日期與時(shí)間類型

mysql中有多種表示日期的數(shù)據(jù)類型,主要有:

  • DATETIME
  • DATE
  • TIMESTAMP
  • TIME
  • YEAR

比如說(shuō),當(dāng)只記錄年信息的時(shí)候,可以只使用YEAR類型,而沒(méi)有必要使用DATE。

每一個(gè)類型都有合法的取值范圍,當(dāng)指定確實(shí)不合法的值時(shí)系統(tǒng)將“零”值插入到數(shù)據(jù)庫(kù)中。

YEAR

year類型是一個(gè)單字節(jié)類型,用于表示年,在存儲(chǔ)時(shí)只需要1字節(jié)??梢允褂酶鞣N格式指定year值,如下:

  • 1、以4位字符串或者4位數(shù)字格式表示的year,范圍為1901~2155。輸入格式為yyyy或者'yyyy',例如:輸入‘2022’或者2022,插入到數(shù)據(jù)庫(kù)的值均為2022。
  • 2、以2位字符串格式表示的year,范圍為“00”到“99”。“00”~“69”和“70”~“99”范圍的值分別被轉(zhuǎn)換為“2022”~“2069”和“1970”~“1999”范圍的year值。“0”與“00”的作用相同。插入超過(guò)取值范圍的值將被轉(zhuǎn)換成2000
  • 3、以兩位數(shù)字表示的YEAR,范圍為1~99。1~69和70~99范圍的值分別被轉(zhuǎn)換為200·~2069和1970~1999范圍的YEAR

值。和字符相比較而言,這里的0值,將被轉(zhuǎn)換成0000,而不是2000。

注意點(diǎn):

兩位整數(shù)范圍與兩位字符串范圍稍有不同。例如,插入2000年,有人可能會(huì)使用數(shù)字格式的0表示year,實(shí)際上,插入數(shù)據(jù)庫(kù)的值為0000,而不是所希望的2000。只有使用字符串格式的“0”或者“00”,才可以被正確的解釋為2000,。非法YEAR值將被轉(zhuǎn)換為0000。

栗子:

我們創(chuàng)建一個(gè)名為yunweijia_2的數(shù)據(jù)表,使用以下sql語(yǔ)句:

mysql> create table yunweijia_2 (y year);
Query OK, 0 rows affected (0.04 sec)
mysql>

然后我們往表中插入一條數(shù)據(jù);

mysql> insert into yunweijia_2 values(2022), ('2022');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>

再次嘗試插入一條數(shù)據(jù);

mysql> insert into yunweijia_2 values ('2166');
ERROR 1264 (22003): Out of range value for column 'y' at row 1
mysql>

我們發(fā)現(xiàn)‘2166’超出了YEAR類型的取值范圍,所以不能插入數(shù)據(jù),這個(gè)時(shí)候我們看下mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù);

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 2022 |
| 2022 |
+------+
2 rows in set (0.00 sec)
mysql>

栗子:

首先我們先刪除yunweijia_2數(shù)據(jù)表中的數(shù)據(jù);

mysql> delete from yunweijia_2;
Query OK, 2 rows affected (0.01 sec)
mysql>

可以看到提示刪除了兩條數(shù)據(jù);

然后我們?cè)俨迦胍韵聰?shù)據(jù);

mysql> insert into yunweijia_2 values ('0'), ('00'), ('88'), ('22');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>

然后看下結(jié)果是什么:

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 2000 |
| 2000 |
| 1988 |
| 2022 |
+------+
4 rows in set (0.00 sec)
mysql>

從上面i看到,字符串‘0’和‘00’的作用相同,分別都轉(zhuǎn)換成了2000年;‘88’轉(zhuǎn)換成了‘1988’;‘22’轉(zhuǎn)換成了‘2022’。

栗子:

老規(guī)矩,先刪除表中現(xiàn)有的數(shù)據(jù);

mysql> delete from yunweijia_2;
Query OK, 4 rows affected (0.01 sec)
mysql>

然后再插入數(shù)據(jù):

mysql> insert into yunweijia_2 values (0), (99), (22);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>

看下結(jié)果:

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 0000 |
| 1999 |
| 2022 |
+------+
3 rows in set (0.00 sec)
mysql>

可以看到,0被轉(zhuǎn)換成了0000,99被轉(zhuǎn)換成了1999,22被轉(zhuǎn)換成了2022。

TIME

time類型用在只需要時(shí)間信息的值,在存儲(chǔ)時(shí)需要3字節(jié),格式為HH:MM:SS。

其中,HH表示小時(shí),MM表示分鐘,SS表示秒。

mysqltime類型的取值范圍為-838:59:59~838:59:598,小時(shí)部分為什么會(huì)這么大呢,這是因?yàn)?code>time類型不僅可以用來(lái)表示一天的時(shí)間,還可能是某個(gè)事件過(guò)去的時(shí)間或者兩個(gè)事件之間的時(shí)間間隔。

(1)‘D HH:MM:S’格式的字符串,可以使用下面任何一種“非嚴(yán)格”的語(yǔ)法:

  • ‘HH:MM:SS’
  • ‘HH:MM’
  • ‘D HH:MM’

這里的D表示日,可以取0~34的值,在插入數(shù)據(jù)庫(kù)時(shí),D被轉(zhuǎn)換成小時(shí)保存,格式為“D*24+HH”;

(2)‘HH:MM:SS’格式的、沒(méi)有間隔符的字符串或者HHMMSS格式的數(shù)值,假定是有意義的時(shí)間。例如:'223344'被理解成‘22:33:44’,但是‘223366’是不合法的(他有一個(gè)沒(méi)有意義的秒部分),存儲(chǔ)時(shí)將變成00:00:00。

注意點(diǎn):

time列分配簡(jiǎn)寫(xiě)時(shí)應(yīng)該注意,如果沒(méi)有冒號(hào),mysql解釋值時(shí),假定最右邊的兩位表示秒。如果time值中使用了冒號(hào),則肯定被單做是當(dāng)天的時(shí)間。

例如:

11:22 會(huì)被mysql解釋成 00:11:22

'11:22'會(huì)被mysql解釋成11:22:00

栗子

創(chuàng)建一個(gè)名為yunweijia_3的數(shù)據(jù)表;

mysql> create table yunweijia_3(t time);
Query OK, 0 rows affected (0.03 sec)
mysql>

往這個(gè)表中插入數(shù)據(jù):

mysql> insert into yunweijia_3 values ('10:06:06'), ('22:22'), ('2 10:10'), ('3 00'), ('20');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql>

看下表中的數(shù)據(jù):

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 10:06:06 |
| 22:22:00 |
| 58:10:00 |
| 72:00:00 |
| 00:00:20 |
+----------+
5 rows in set (0.00 sec)
mysql>

小提示:在使用‘D HH’格式時(shí),小時(shí)一定要使用雙位數(shù)值,如果是小于10的小時(shí)數(shù),應(yīng)在前面加0以用來(lái)補(bǔ)全雙位數(shù)值。

舉個(gè)栗子 :

首先我們刪除數(shù)據(jù)表yunweijia_3里面的數(shù)據(jù);

mysql> delete from yunweijia_3;
Query OK, 5 rows affected (0.01 sec)
mysql>

然后再表中插入數(shù)據(jù):

mysql> insert into yunweijia_3 values ('101112'), (111213), ('0');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>

再次向表中插入一條數(shù)據(jù);

mysql> insert into yunweijia_3 values (107010);
ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1
mysql>

可以看到這條數(shù)據(jù)沒(méi)有插入成功,我看看下提示信息;

mysql> show warnings;
+-------+------+--------------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------------+
| Error | 1292 | Incorrect time value: '107010' for column 't' at row 1 |
+-------+------+--------------------------------------------------------+
1 row in set (0.00 sec)
mysql>

為什么這次會(huì)插入失敗呢,是不是因?yàn)槲覀兊姆昼姂?yīng)該是小于60的啊,但是這里是70,所以報(bào)錯(cuò)了。

我們查看下這個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)現(xiàn)在的展示吧:

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 10:11:12 |
| 11:12:13 |
| 00:00:00 |
+----------+
3 rows in set (0.00 sec)
mysql>

又舉個(gè)栗子:

我們還可以使用系統(tǒng)函數(shù)向time字段列插入值;

刪除數(shù)據(jù)表yunweijia_3里面的數(shù)據(jù);

mysql> delete from yunweijia_3;
Query OK, 3 rows affected (0.01 sec)
mysql>

然后在表中插入數(shù)據(jù);

mysql> insert into yunweijia_3 values (CURRENT_TIME), (NOW());
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>

查看下數(shù)據(jù)庫(kù)中的結(jié)果;

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 23:03:41 |
| 23:03:41 |
+----------+
2 rows in set (0.00 sec)

mysql>

從結(jié)果中可以看到,獲取系統(tǒng)當(dāng)前的日志插入到time類型的列中。

到此這篇關(guān)于最全mysql數(shù)據(jù)類型梳理匯總的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中case?when的兩種基本用法及區(qū)別總結(jié)

    MySQL中case?when的兩種基本用法及區(qū)別總結(jié)

    在mysql中case when用于計(jì)算條件列表并返回多個(gè)可能結(jié)果表達(dá)式之一,下面這篇文章主要給大家介紹了關(guān)于MySQL中case?when的兩種基本用法及區(qū)別的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • MySQL 5.7常見(jiàn)數(shù)據(jù)類型

    MySQL 5.7常見(jiàn)數(shù)據(jù)類型

    這篇文章主要介紹了MySQL 5.7數(shù)據(jù)類型詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • mysql簡(jiǎn)單實(shí)現(xiàn)查詢結(jié)果添加序列號(hào)的方法

    mysql簡(jiǎn)單實(shí)現(xiàn)查詢結(jié)果添加序列號(hào)的方法

    這篇文章主要介紹了mysql簡(jiǎn)單實(shí)現(xiàn)查詢結(jié)果添加序列號(hào)的方法,結(jié)合實(shí)例形式演示了2種查詢結(jié)果添加序列號(hào)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 用一條mysql語(yǔ)句插入多條數(shù)據(jù)

    用一條mysql語(yǔ)句插入多條數(shù)據(jù)

    這篇文章主要介紹了在mysql中使用一條sql語(yǔ)句插入多條數(shù)據(jù),效率非常高,但是原理其實(shí)很簡(jiǎn)單,希望對(duì)大家有所幫助
    2014-09-09
  • SELECT?*?效率低原理解析

    SELECT?*?效率低原理解析

    這篇文章主要為大家介紹了SELECT?*?效率低原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Navicat連接MySQL提示1045錯(cuò)誤解決(重置MySQL密碼)

    Navicat連接MySQL提示1045錯(cuò)誤解決(重置MySQL密碼)

    連接MySQL數(shù)據(jù)庫(kù)時(shí)難免會(huì)遇到1045錯(cuò)誤,主要是因?yàn)橛脩糨斎氲挠脩裘蛎艽a錯(cuò)誤被拒絕訪問(wèn),如果不想重裝,需要找回密碼或者重置密碼,這篇文章主要給大家介紹了關(guān)于Navicat連接MySQL提示1045錯(cuò)誤解決的方法,主要是重置MySQL密碼,需要的朋友可以參考下
    2023-04-04
  • mysql刪除字段的基本語(yǔ)法和示例

    mysql刪除字段的基本語(yǔ)法和示例

    在MySQL中,使用ALTER?TABLE語(yǔ)句配合DROP?COLUMN子句可以刪除表中的某個(gè)字段,示例中,從employees表中刪除email字段,此操作會(huì)永久刪除該字段的數(shù)據(jù),因此需提前備份,需要的朋友可以參考下
    2024-09-09
  • Mysql高效分頁(yè)詳解

    Mysql高效分頁(yè)詳解

    這篇文章主要為大家詳細(xì)介紹了Mysql高效分頁(yè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL中因字段字符集不同導(dǎo)致索引不能命中的解決方法

    MySQL中因字段字符集不同導(dǎo)致索引不能命中的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL中因字段字符集不同導(dǎo)致索引不能命中的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫(kù)遷移以及表的導(dǎo)出和導(dǎo)入

    MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫(kù)遷移以及表的導(dǎo)出和導(dǎo)入

    作為流行的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL的使用者眾多,為了維護(hù)數(shù)據(jù)安全性,數(shù)據(jù)備份是必不可少的,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫(kù)遷移以及表的導(dǎo)出和導(dǎo)入的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

曲水县| 淮滨县| 长沙县| 三河市| 布尔津县| 白水县| 台北市| 淮滨县| 南漳县| 商洛市| 长岛县| 天峨县| 怀宁县| 伊川县| 祁门县| 综艺| 南充市| 丹江口市| 本溪| 吉首市| 涟源市| 都兰县| 渭源县| 汤阴县| 和林格尔县| 根河市| 尉氏县| 枝江市| 城步| 临漳县| 楚雄市| 清流县| 垫江县| 盐源县| 玉树县| 呼和浩特市| 林芝县| 太原市| 襄垣县| 黔西县| 比如县|