1. 程式人生 > >MySQL 數值型別與字元型別

MySQL 數值型別與字元型別

MySQL學習–2

一、資料型別(MySQL版本:5.7.23-0ubuntu0.18.04.1 )

​ 數值、字元、時間

​ 數值又包括整型,浮點數

​ 整數包括:tinyint-> 數值很小一個位元組,smallint->兩個位元組,mediumint->三個位元組,int->四個位元組,big->8個位元組;

mysql> describe number;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| n_tiny | tinyint(4) | NO | | NULL | | | n_small | smallint(6) | NO | | NULL | | | n_mediumint | mediumint(9) | NO | | NULL | | | n_int | int(11) | NO | | NULL | | | n_big | bigint(20) | NO | PRI | NULL | auto_increment | +-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec) /*這些型別值的預設大小根據系統而定,例如:int(11)表示MySQL顯示11位數包括符號,但是前提條件是在4個位元組內可以表示的數值範圍,顯示位數不影響實際大小; ---- 無符號整數型別,範圍增大 -128~127 無符號為 0~255 整數型別有一個專屬屬性 auto_increment 沒有特殊要求順序自動填充值,如果改變某處值下一個按照上一個順序填充,一般搭配 primary key 例如n_big列 */

浮點數包括:float ->四個位元組,double->8個位元組。

float #  多了一個精度問題,是小數點後顯示多少位數,同整形
double# /* float double 型別的無符號型別不是範圍增大,而是從0.0開始 */

字元就是單個字元和字串

字元型別分類:

char[(M)] #固定長度M,可省去為0,作為佔位所用,如果所採集值不足M個向右新增空格,但是查詢時不涉及空格問題
varchar(M)  #可變長度,當不夠M個時,那就不夠吧,不可省略M,總的長度為M+1還有一個錯誤位
#M最大
#例如:
mysql> describe class;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| name  | varchar(20)           | NO   |     | NULL    |       |
| age   | int(10) unsigned      | NO   |     | NULL    |       |
| sex   | enum('male','female') | NO   |     | NULL    |       |
| birth | date                  | NO   |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

blob #binary large object  可以儲存二進位制檔案 例如 圖片
text #非二進位制字串 儲存範圍大
tinyblob,tinytext,mediumblob,mediumtext,longblob,longtext#類似與整形tiny等 主要是儲存範圍不同
enum #列舉  很有用的 在預先定義好的enum中選擇資料,如果插入時沒有選擇enum型別中的值會報錯,除了"" 和null  而且enum型別可以當作數值型別處理 最大可以表示 65525
set #最大 64位->8位元組 而且AN!位位位!儲存   
#例如:
mysql> describe s;
+-------+---------------------------------+------+-----+---------+-------+
| Field | Type                            | Null | Key | Default | Extra |
+-------+---------------------------------+------+-----+---------+-------+
| e     | enum('X','XL','L','XXl','XXXL') | YES  |     | NULL    |       |
+-------+---------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
-----
mysql> insert into s values("X"),("XL"),("L"),("XXL"),("XXXL");
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select e ,e+0,e+1,bin(e+0) from s;
+------+------+------+----------+
| e    | e+0  | e+1  | bin(e+0) |
+------+------+------+----------+
| X    |    1 |    2 | 1        |
| XL   |    2 |    3 | 10       |
| L    |    3 |    4 | 11       |
| XXl  |    4 |    5 | 100      |
| XXXL |    5 |    6 | 101      |
+------+------+------+----------+

#因為第一位要儲存錯誤碼,所以e開始為1
+-------+-------------------------------------------------------+------+-----+---------+-------+
| Field | Type                                                  | Null | Key | Default | Extra |
+-------+-------------------------------------------------------+------+-----+---------+-------+
| s     | set('alibaba','baidu','meituan','facebook','gooogle') | YES  |     | NULL    |       |
+-------+-------------------------------------------------------+------+-----+---------+-------+
mysql> select s ,s+0,s+1,bin(s+0) from h;
+----------+------+------+----------+
| s        | s+0  | s+1  | bin(s+0) |
+----------+------+------+----------+
| alibaba  |    1 |    2 | 1        |
| gooogle  |   16 |   17 | 10000    |
| facebook |    8 |    9 | 1000     |
| baidu    |    2 |    3 | 10       |
| meituan  |    4 |    5 | 100      |
+----------+------+------+----------+
5 rows in set (0.00 sec)


#從上面可以的到的是 google 為什麼表示為16呢,因為按位算,google在我們定義的時候順序為5,所以第5位填充1,其餘沒有則為0,所以google 10000 ->16