數據類型(2)

字符類型

#官網:https://dev.mysql.com/doc/refman/5.7/en/char.html
# 注意:  char 和 varchar  括號內的參數知道的都是字符長度

# char 類型:  定長 , 簡單粗暴浪費空間 , 存取速度快
    字符長度範圍 : 0-255(一箇中文是一個字符 , 是utf8編碼的3個字節)
    存儲:
        存儲char類型的值時 , 會往右填充空格來知足長度
        例如:指定長度爲10,存>10個字符則報錯,存<10個字符則用空格填充直到湊夠10個字符存儲


 檢索:
        在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非咱們打開pad_char_to_full_length SQL模式(設置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
      查詢sql的默認模式:select @@sql_mode;)

#varchar類型:變長,精準,節省空間,存取速度慢
    字符長度範圍:0-65535(若是大於21845會提示用其餘類型 。mysql行最大限制爲65535字節,字符編碼爲utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
    存儲:
        varchar類型存儲數據的真實內容,不會用空格填充,若是'ab  ',尾部的空格也會被存起來
        強調:varchar類型會在真實數據前加1-2Bytes的前綴,該前綴用來表示真實數據的bytes字節數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大字節限制,即已經足夠使用)
        若是真實的數據<255bytes則須要1Bytes的前綴(1Bytes=8bit 2**8最大表示的數字爲255)
        若是真實的數據>255bytes則須要2Bytes的前綴(2Bytes=16bit 2**16最大表示的數字爲65535)

    檢索:
        尾部有空格會保存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

 

官網解釋以下:html

 

 

 

 

驗證:mysql

驗證以前瞭解兩個函數:sql

length()    # 查看字節數 
char_length()   #查看字符數

 

1.char填充空格來知足固定長度,可是在查詢時卻會很不要臉地刪除尾部的空格(裝做本身好像沒有浪費過空間同樣),而後修改sql_mode讓其現出原形。數據庫

# 建立t1表,分別指明字段x爲char類型,字段y爲varchar類型
mysql> create table t1(x char(5),y varchar(4));
Query OK, 0 rows affected (0.16 sec)

# char存放的是5個字符,而varchar存4個字符
mysql>  insert into t1 values('你瞅啥 ','你瞅啥 ');
Query OK, 1 row affected (0.01 sec)

# 在檢索時char很不要臉地將本身浪費的2個字符給刪掉了,裝的好像本身沒浪費過空間同樣,而varchar很老實,存了多少,就顯示多少
mysql> select x,char_length(x),y,char_length(y) from t1;
+-----------+----------------+------------+----------------+
| x         | char_length(x) | y          | char_length(y) |
+-----------+----------------+------------+----------------+
| 你瞅啥    |              3 | 你瞅啥     |              4 |
+-----------+----------------+------------+----------------+
1 row in set (0.02 sec)

 #略施小計,讓char現原形
 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected (0.00 sec)

#查看當前mysql的mode模式
mysql> select @@sql_mode;
+-------------------------+
| @@sql_mode              |
+-------------------------+
| PAD_CHAR_TO_FULL_LENGTH |
+-------------------------+
1 row in set (0.00 sec)

#原形畢露了吧。。。。
mysql> select x,char_length(x) y,char_length(y) from t1;
+-------------+------+----------------+
| x           | y    | char_length(y) |
+-------------+------+----------------+
| 你瞅啥      |    5 |              4 |
+-------------+------+----------------+
1 row in set (0.00 sec)

# 查看字節數
#char類型:3箇中文字符+2個空格=11Bytes
#varchar類型:3箇中文字符+1個空格=10Bytes
mysql> select x,length(x),y,length(y) from t1;
+-------------+-----------+------------+-----------+
| x           | length(x) | y          | length(y) |
+-------------+-----------+------------+-----------+
| 你瞅啥      |        11 | 你瞅啥     |        10 |
+-------------+-----------+------------+-----------+
1 row in set (0.02 sec)

 

總結:

#經常使用字符串系列:char與varchar
注:雖然varchar使用起來較爲靈活,可是從整個系統的性能角度來講,char數據類型的處理速度更快,有時甚至能夠超出varchar處理速度的50%。所以,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

#其餘字符串系列(效率:char>varchar>text)
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB 
BINARY系列 BINARY VARBINARY


text:text數據類型用於保存變長的大字符串,能夠組多到65535 (2**16 − 1)個字符。
mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.

 

枚舉類型和集合類型

字段的值只能在給定範圍中選擇,如單選框,多選框函數

enum 單選  只能在給定的範圍內選一個值 , 如性別sex 男 male /女female性能

set 多選  在給定的範圍內能夠選擇一個或一個以上的值 (愛好1,愛好2,愛好3....)編碼

mysql> create table consumer(
    -> id int,
    -> name varchar(50),
    -> sex enum("male","female","other"),
    -> level enum("vip1","vip2","vip3","vip4"),
    -> fav set("play","music","girl","money")
    -> );
Query OK, 0 rows affected (0.38 sec)


mysql> insert into consumer values
    ->     (1,'趙雲','male',"vip2","girl,money"),
    ->     (2,'趙雲2','other','vip4','music');
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> select * from db5.consumer;
+------+---------+-------+-------+------------+
| id   | name    | sex   | level | fav        |
+------+---------+-------+-------+------------+
|    1 | 趙雲    | male  | vip2  | girl,money |
|    2 | 趙雲2   | other | vip4  | music      |
+------+---------+-------+-------+------------+
2 rows in set (0.04 sec)
相關文章
相關標籤/搜索