MySQL資料型別 -- 字元型
版權宣告:本文為博主原創文章,歡迎擴散,擴散請務必註明出處。https://blog.csdn.net/robinson_0612/article/details/82824320
在SQL/">MySQL關係型資料庫中,MySQL支援的資料型別非常豐富。它主要分為3大類,即:數值型,日期時間性,字元型。而實際上這三類資料型別可以進一步的細分擴充套件,可以根據業務需要選擇最適合的一種。本文主要介紹字元型別,並演示其用法。
一、字元型
MySQL支援的字元型別可以進一步細分,即可以分為定(變)長字元型,大值字元型,列舉集合型別等。如下圖所示:
二、字元型空間需求
三、字元型演示
mysql> show variables like 'version'; +---------------+------------+ | Variable_name | Value | +---------------+------------+ | version | 5.7.22-log | +---------------+------------+ mysql> select 'Leshami' as Author -> union all -> select 'http://blog.csdn.net/leshami'; +------------------------------+ | Author | +------------------------------+ | Leshami | | http://blog.csdn.net/leshami | +------------------------------+ -- 建立表,包含2種資料型別的列 mysql> CREATE TABLE vc -> ( -> v VARCHAR(4), -> c CHAR(4) -> ); Query OK, 0 rows affected (0.12 sec) mysql> INSERT INTO vc -> VALUES ('ab ', 'ab '); Query OK, 1 row affected (0.02 sec) -- 通過字串函式可知,第二列定長型別ab後的空格被截斷 mysql> SELECT CONCAT('(', v, ')'), -> CONCAT('(', c, ')') FROM vc; +---------------------+---------------------+ | CONCAT('(', v, ')') | CONCAT('(', c, ')') | +---------------------+---------------------+ | (ab ) | (ab) | +---------------------+---------------------+ 1 row in set (0.00 sec) -- 建立包含列舉和集合型別的表 mysql> CREATE TABLE tb5(status ENUM('a','b'), -> range_set SET ('a','b','c','d')); Query OK, 0 rows affected (0.16 sec) mysql> INSERT INTO tb5 -> VALUES ('a', ('a,b')), ('b', ('a,d')); Query OK, 2 rows affected (0.05 sec) Records: 2 Duplicates: 0 Warnings: 0 -- 以下insert操作僅為status插入值,報錯,因為c值不在列舉範圍內 mysql> INSERT INTO tb5(status) -> VALUES ('c'); ERROR 1265 (01000): Data truncated for column 'status' at row 1 -- 以下insert操作僅為status插入值,報錯,因為a,b聯合值不在列舉範圍內 mysql> INSERT INTO tb5(status) -> VALUES ('a,b'); ERROR 1265 (01000): Data truncated for column 'status' at row 1 -- 以下insert操作僅為range_set插入值,報錯,因為值超出集合範圍 mysql> INSERT INTO tb5(range_set) -> VALUES ('a,b,c,f'); ERROR 1265 (01000): Data truncated for column 'range_set' at row 1 -- 以下操作成功 mysql> INSERT INTO tb5(range_set) -> VALUES ('a,b,c,d,a,c'); Query OK, 1 row affected (0.02 sec) -- 檢視資料行 mysql> SELECT * FROM tb5; +--------+-----------+ | status | range_set | +--------+-----------+ | a | a,b | | b | a,d | | NULL | a,b,c,d | +--------+-----------+ 3 rows in set (0.00 sec) mysql> SELECT status + 0, range_set + 0 -> FROM tb5; +------------+---------------+ | status + 0 | range_set + 0 | +------------+---------------+ | 1 | 3 | | 2 | 9 | | NULL | 15 | +------------+---------------+ 3 rows in set (0.00 sec) -- 對於列舉型與集合型,不能超出列舉和集合範圍 -- 集合型列值插入時可以重複,插入成功後重復值被過濾