<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
數值型資料型別主要用來儲存數位,mysql
提供了多種數值資料型別,不同的資料型別提供不同的取值範圍,可以儲存的值範圍越大,其所需要的儲存空間也會越大。
mysql
主要提供的整數型別有TINYINT
、SMALLINT
、MEDIUMINT
、INT
、BIGINT
。整數型別的屬性欄位可以新增AUTO_INCREMENT
自增約束條件。
看下下面兩個表;
mysql
中的整數型資料型別mysql
不同整數型別的取值範圍舉個例子:
year int(4);
該宣告指明,在year
欄位中的資料一般只顯示4
位數位的寬度;
注意點:顯示寬度和資料型別取值範圍是無關的。顯示寬度只是指明mysql
最大可能顯示的數位個數,數值的位數小於指定的寬度時會由空格填充;如果插入了大於顯示寬度的值,只要該值不超過該型別整數的取值範圍,數值依然可以插入,而且能夠顯示出來。
例如:向year
欄位插入一個數值12345
,當使用select
查詢該列值的時候,mysql
顯示的將是完整的帶有5位數位的12345
,而不是4位元數位的值。
其他整數型資料型別也可以在定義表結構時指定所需要的顯示寬度,如果不指定,則系統為每一種型別指定預設的寬度。
不同的整數型別有不同的取值範圍,並且需要不同的儲存空間,因此應該根據實際需要選擇最合適的型別,這樣有利於提高查詢的效率和節省儲存空間。整數型別是不帶小數部分的數值,現實生活中很多地方都需要用到帶小數的數值。下面我們就來介紹下小數型別。
注意點:顯示寬度只用於顯示,並不能限制取值範圍和佔用空間。
mysql
中使用浮點數和定點數來表示小數。
浮點數型別有兩種:
定點數型別只有一種:
浮點數型別和定點數型別都可以用(M,N)來表示。其中呢,我們用M
稱為精度,表示總共的位數;N
稱為標度,表示小數的位數。
DECIMAL
型別不同於FLOAT
和DOUBLE
,DECIMAL
實際是以串存放的,可能的最大取值範圍和DOUBLRE
一樣,但是其有效的取值範圍由M
和D
的值來決定。怎麼說呢?
如果改變M
而固定D
,則其取值範圍將隨著M
的變大而變大。
幾乎正常業務情況下是不可能用完的,因為他們的取值範圍如下:
FLOAT
型別的取值範圍:
DOUBLE
型別的取值範圍:
注意點:無論是定點數還是浮點數型別,如果使用者指定的精度超出精度範圍,則會四捨五入。
可能有點繞,舉個栗子吧:
建立一個資料表為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>
然後我們在這個表中插入一條資料,sql
語句如下:
mysql> insert into yunweijia_1 values (6.66, 7.77, 8.888); Query OK, 1 row affected, 1 warning (0.01 sec) mysql>
看上面的提示資訊,是不是在我們執行插入語句的時候,給了一個警告資訊,然後我們來看下這個警告資訊是什麼吧;
mysql> show warnings; +-------+------+----------------------------------------+ | Level | Code | Message | +-------+------+----------------------------------------+ | Note | 1265 | Data truncated for column 'z' at row 1 | +-------+------+----------------------------------------+ 1 row in set (0.00 sec) mysql>
可以看到他提示說,z
欄位在插入的時候被截斷了,但是x
和y
截斷就沒有提出警告。
那麼檢視下結果吧:
mysql> select * from yunweijia_1;
+------+------+------+
| x | y | z |
+------+------+------+
| 6.7 | 7.8 | 8.9 |
+------+------+------+
1 row in set (0.00 sec)
mysql>
可以看到分別都進行了四捨五入,這點需要注意。
FLOAT
和DOUBLE
在不指定精度操作時,預設會按照實際的精度(由計算機硬體和作業系統決定),DECIMAL
若不指定精度則預設為(10,0);
浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的資料範圍;他的缺點是會引起精度問題;
注意點:在
mysql
中,定點數以字串形式儲存,在對精度要求比較高的時候,使用DECIMAL
的型別比較好,另外,兩個浮點數進行減法和比較運算時,容易出現問題,所以在使用浮點數時需要注意,並儘量避免做浮點數比較。
mysql
中有多種表示日期的資料型別,主要有:
比如說,當只記錄年資訊的時候,可以只使用YEAR
型別,而沒有必要使用DATE
。
每一個型別都有合法的取值範圍,當指定確實不合法的值時系統將“零”值插入到資料庫中。
year
型別是一個單位元組型別,用於表示年,在儲存時只需要1位元組。可以使用各種格式指定year
值,如下:
year
,範圍為1901
~2155
。輸入格式為yyyy
或者'yyyy',例如:輸入‘2022’或者2022,插入到資料庫的值均為2022。year
,範圍為“00”到“99”。“00”~“69”和“70”~“99”範圍的值分別被轉換為“2022”~“2069”和“1970”~“1999”範圍的year
值。“0”與“00”的作用相同。插入超過取值範圍的值將被轉換成2000
。YEAR
,範圍為1~99。1~69和70~99範圍的值分別被轉換為200·~2069和1970~1999範圍的YEAR
值。和字元相比較而言,這裡的0值,將被轉換成0000,而不是2000。
注意點:
兩位整數範圍與兩位字串範圍稍有不同。例如,插入2000年,有人可能會使用數位格式的0表示
year
,實際上,插入資料庫的值為0000,而不是所希望的2000。只有使用字串格式的“0”或者“00”,才可以被正確的解釋為2000,。非法YEAR
值將被轉換為0000。
栗子:
我們建立一個名為yunweijia_2
的資料表,使用以下sql
語句:
mysql> create table yunweijia_2 (y year); Query OK, 0 rows affected (0.04 sec) mysql>
然後我們往表中插入一條資料;
mysql> insert into yunweijia_2 values(2022), ('2022'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>
再次嘗試插入一條資料;
mysql> insert into yunweijia_2 values ('2166'); ERROR 1264 (22003): Out of range value for column 'y' at row 1 mysql>
我們發現‘2166’超出了YEAR
型別的取值範圍,所以不能插入資料,這個時候我們看下mysql
資料庫中的資料;
mysql> select * from yunweijia_2; +------+ | y | +------+ | 2022 | | 2022 | +------+ 2 rows in set (0.00 sec) mysql>
栗子:
首先我們先刪除yunweijia_2
資料表中的資料;
mysql> delete from yunweijia_2; Query OK, 2 rows affected (0.01 sec) mysql>
可以看到提示刪除了兩條資料;
然後我們再插入以下資料;
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>
然後看下結果是什麼:
mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 2000 |
| 2000 |
| 1988 |
| 2022 |
+------+
4 rows in set (0.00 sec)
mysql>
從上面i看到,字串‘0’和‘00’的作用相同,分別都轉換成了2000年;‘88’轉換成了‘1988’;‘22’轉換成了‘2022’。
栗子:
老規矩,先刪除表中現有的資料;
mysql> delete from yunweijia_2; Query OK, 4 rows affected (0.01 sec) mysql>
然後再插入資料:
mysql> insert into yunweijia_2 values (0), (99), (22); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql>
看下結果:
mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 0000 |
| 1999 |
| 2022 |
+------+
3 rows in set (0.00 sec)
mysql>
可以看到,0被轉換成了0000,99被轉換成了1999,22被轉換成了2022。
time
型別用在只需要時間資訊的值,在儲存時需要3位元組,格式為HH:MM:SS
。
其中,HH
表示小時,MM
表示分鐘,SS
表示秒。
mysql
中time
型別的取值範圍為-838:59:59~838:59:598,小時部分為什麼會這麼大呢,這是因為time
型別不僅可以用來表示一天的時間,還可能是某個事件過去的時間或者兩個事件之間的時間間隔。
(1)‘D HH:MM:S’格式的字串,可以使用下面任何一種“非嚴格”的語法:
這裡的D表示日,可以取0~34的值,在插入資料庫時,D被轉換成小時儲存,格式為“D*24+HH”;
(2)‘HH:MM:SS’格式的、沒有間隔符的字串或者HHMMSS格式的數值,假定是有意義的時間。例如:'223344'被理解成‘22:33:44’,但是‘223366’是不合法的(他有一個沒有意義的秒部分),儲存時將變成00:00:00。
注意點:
為
time
列分配簡寫時應該注意,如果沒有冒號,mysql
解釋值時,假定最右邊的兩位表示秒。如果time
值中使用了冒號,則肯定被單做是當天的時間。例如:
11:22 會被
mysql
解釋成 00:11:22'11:22'會被
mysql
解釋成11:22:00
建立一個名為yunweijia_3
的資料表;
mysql> create table yunweijia_3(t time); Query OK, 0 rows affected (0.03 sec) mysql>
往這個表中插入資料:
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>
看下錶中的資料:
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’格式時,小時一定要使用雙位數值,如果是小於10的小時數,應在前面加0以用來補全雙位數值。
舉個栗子 :
首先我們刪除資料表yunweijia_3
裡面的資料;
mysql> delete from yunweijia_3; Query OK, 5 rows affected (0.01 sec) mysql>
然後再表中插入資料:
mysql> insert into yunweijia_3 values ('101112'), (111213), ('0'); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql>
再次向表中插入一條資料;
mysql> insert into yunweijia_3 values (107010); ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1 mysql>
可以看到這條資料沒有插入成功,我看看下提示資訊;
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>
為什麼這次會插入失敗呢,是不是因為我們的分鐘應該是小於60的啊,但是這裡是70,所以報錯了。
我們檢視下這個資料庫中的資料現在的展示吧:
mysql> select * from yunweijia_3; +----------+ | t | +----------+ | 10:11:12 | | 11:12:13 | | 00:00:00 | +----------+ 3 rows in set (0.00 sec) mysql>
又舉個栗子:
我們還可以使用系統函數向time
欄位列插入值;
刪除資料表yunweijia_3
裡面的資料;
mysql> delete from yunweijia_3; Query OK, 3 rows affected (0.01 sec) mysql>
然後在表中插入資料;
mysql> insert into yunweijia_3 values (CURRENT_TIME), (NOW()); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>
檢視下資料庫中的結果;
mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 23:03:41 |
| 23:03:41 |
+----------+
2 rows in set (0.00 sec)mysql>
從結果中可以看到,獲取系統當前的紀錄檔插入到time
型別的列中。
到此這篇關於最全mysql資料型別梳理彙總的文章就介紹到這了,更多相關mysql資料型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45