MySQL数据类型 -- 字符型

在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)

-- 对于枚举型与集合型,不能超出枚举和集合范围
-- 集合型列值插入时可以重复,插入成功后重复值被过滤
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页