1. 程式人生 > >6-12 varchar和char 枚舉類型enum 集合set

6-12 varchar和char 枚舉類型enum 集合set

blob 保存 1byte 單選框 har col pla ins 其他

1 字符類型char和varchar

#官網: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) 檢索: 尾部有空格會保存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

可以用這兩個函數驗證:

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

總結

#常用字符串系列: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.

2,枚舉類型和集合

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

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,read,study) #在指定範圍內,多選多
    -> );
Query OK, 0 rows affected (0.03 sec)


mysql> insert into consumer values
    -> (1,趙雲,male,vip2,read,study),
    -> (2,趙雲2,other,vip4,play);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from consumer;
+------+---------+-------+-------+------------+
| id   | name    | sex   | level | fav        |
+------+---------+-------+-------+------------+
|    1 | 趙雲    | male  | vip2  | read,study |
|    2 | 趙雲2   | other | vip4  | play       |
+------+---------+-------+-------+------------+
rows in set (0.00 sec)

6-12 varchar和char 枚舉類型enum 集合set