专栏首页乐沙弥的世界MySQL数据类型 -- 字符型

MySQL数据类型 -- 字符型

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn.net/robinson_0612/article/details/82824320

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

-- 对于枚举型与集合型,不能超出枚举和集合范围
-- 集合型列值插入时可以重复,插入成功后重复值被过滤

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL数据类型 -- 数值型

    版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn.net/robinson_0612/art...

    Leshami
  • MySQL MHA配置常见问题

        MHA在MySQL数据库中被广泛使用,它小巧易用,功能强大,实现了基于MySQL replication架构的自手动主从故障转移,从库重定向到主库并自动...

    Leshami
  • MySQL 数据库简单操作

        对于想要从事或爱好mysql相关工作的童鞋们,有必要掌握在命令行下对mysql实现一些简单的操作。本文从描述了如何登录到mysql数据库服务器,如何在m...

    Leshami
  • Zabbix监控lnmp(附模板)

    需要用到ngx_http_stub_status_module模块,提供对基本状态信息的访问默认情况下不构建此模块,应使用—with-http_stub_sta...

    没有故事的陈师傅
  • JMeter处理器09

    前言 在jmeter中提供了两种处理器,用于修改请求数据或处理响应数据。 ? 前置处理器 后置处理器 前置处理器 前置处理器是在请求发送前做相关处理。可以用于在...

    苦叶子
  • DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)

    用户1910585
  • 使用PHP生成ICO图标

    今天教大家如何使用PHP生成ico图标,ico图标在每个网站中都需要用到的,使用方法也是很简单的,基本上以下面的方式为主,还有其他的方式。

    申霖
  • DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)

    用户1910585
  • SpringCloud-Eureka【服务案例】

      上篇文章我们介绍了Eureka的集群环境搭建,本文我们来通过Eureka作为注册中心来实现一个案例,案例结构如下

    用户4919348
  • Mysql编码设置

    缺省是latin1编码,会导致中文乱码。 修改库的编码: mysql> alter database db_name character set utf8;...

    曼路

扫码关注云+社区

领取腾讯云代金券