列类型——字符串类型

在 SQL 中,将字符串类型分成了 6 类,分别为:charvarchartextblobenumset.

第一类   定长字符串

定长字符串(char):   即磁盘(二维表)在定义结构的时候就已经确定了最终数据的存储长度。

  • char(L):L 表示 Length,即可以存储的长度,单位为字符,最大长度为 255;
  • char(4):表示在 UTF8 环境下,需要 4*3=12 个字节。

第二类   变长字符串

  • varchar(L):L 表示 Length,理论长度是 65536,但是会多出 1 到 2 个字节来确定存储的实际长度;
  • varchar(10):例如存储 10 个汉字,在 UTF8 环境下,需要 10*3+1=31 个字节。

实际上,如果存储长度超过 255 个字符,则既不用定长字符串也不用变长字符串,而是用文本字符串text.

如何选择定长字符串和变长字符串:

  定长字符串对磁盘空间有些浪费,但是效率高;如果数据基本上确定长度都一样,就使用定长字符串,例如身份证号,学号,电话号等;

  变长字符串对磁盘空间比较节省,但是效率低;如果数据不能确定长度,就使用变长字符串,例如姓名,地址等;

第三类   文本字符串

一般来说超过255个字符就会使用文本字符串

text: 存储文字

blob:  存储二进制数据(存储路径使用)

第四类    枚举字符串

enum:需要先将所有可能出现的结果都设计好,实际上存储的数据必然是已经设计好的数据其中之一

mysql> create table if not exists practice.my_enum(
    -> gender enum('','','保密')
    -> )charset utf8;
Query OK, 0 rows affected

我们查看一下这张表:

mysql> desc my_enum;
+--------+------------------------+------+-----+---------+-------+
| Field  | Type                   | Null | Key | Default | Extra |
+--------+------------------------+------+-----+---------+-------+
| gender | enum('','','保密') | YES  |     | NULL    |       |
+--------+------------------------+------+-----+---------+-------+
1 row in set

如图,如果我想添加几条信息:

1. 使用enum中已有字符

mysql> insert into my_enum values(''),(''),('保密');
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

2.使用数值对应enum中字符

mysql> insert into my_enum values(1);
Query OK, 1 row affected

如果没有使用表中已有数据:

mysql> insert into my_enum values('人妖');
1265 - Data truncated for column 'gender' at row 1

查看表中信息:

mysql> select * from my_enum;
+--------+
| gender |
+--------+
||
||
| 保密   |
||
+--------+
4 rows in set

使用枚举字符串的好处:

  1. 规范数据格式,插入的数据只能是之前定义好的数据之一

  2. 节省存储空间,枚举实际上存储的是数据本身而不是字符串

证明枚举字段存储的是数值

  具体方法为:将数据取出来+0,如果是字符串最终结果永远为0,否则就是其他值。 

mysql> select gender + 0,gender from my_enum;
+------------+--------+
| gender + 0 | gender |
+------------+--------+
|          1 ||
|          2 ||
|          3 | 保密   |
|          1 ||
+------------+--------+
4 rows in set

枚举原理:枚举在进行数据规范(定义)的时候,系统会自动建立一个数字与枚举元素的对应关系(放在日志中);在进行数据插入的时候,系统自动将字符串转换为对应的数值进行存储;在进行数据提取的时候,系统自动将数值转换成对应的字符串进行显示。

第五类    集合字符串

set: 与枚举类似,存储的是数值而不是字符串

创建并查询表结构:

Query OK, 0 rows affected

mysql> desc my_set;
+--------+------------------------+------+-----+---------+-------+
| Field  | Type                   | Null | Key | Default | Extra |
+--------+------------------------+------+-----+---------+-------+
| gender | enum('','','保密') | YES  |     | NULL    |       |
+--------+------------------------+------+-----+---------+-------+
1 row in set

 

转载于:https://www.cnblogs.com/ZZUGPY/p/8392118.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值