博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
列类型——字符串类型
阅读量:6574 次
发布时间:2019-06-24

本文共 2545 字,大约阅读时间需要 8 分钟。

在 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 affectedRecords: 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 affectedmysql> 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

你可能感兴趣的文章
Silverlight/WPF中DependencyProperty使用陷阱一枚
查看>>
转:一个Sqrt函数引发的血案
查看>>
国际音标遗漏
查看>>
c++ 编译时函数匹配和运行时类型识别
查看>>
Velocity - 单例还是非单例
查看>>
mysql 安装和修改编码(utf8mb4)
查看>>
Ethernet、VLAN、QinQ
查看>>
Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
查看>>
SQL中的ROW_NUMBER()和while循环对每一行执行操作
查看>>
Android Graphviz 安装
查看>>
DevExpreess汉化使用方法及汉化包
查看>>
31. Next Permutation (java 字典序生成下一个排列)
查看>>
同时装有py2 和3,运行scrapy如何区分
查看>>
Android开发之动态加载,运行未安装apk
查看>>
uva-10245-分治
查看>>
前台html基础标签7.6
查看>>
javascript arguments(转)
查看>>
Google maps API开发(一)(转)
查看>>
让MySQL支持InnoDB
查看>>
USACO 1.3.2
查看>>