列的类型定义——字符串类型

简介: 列的类型定义——字符串类型

一、CHAR 类型和 VARCHAR 类型

CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:


1.字符串字符(M)


   其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。


       CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。


       VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间

CHAR(4)

存储字节数

VARCHAR(4)

存储字节数

‘’

‘’

4

‘’

1

‘ab’

‘ab’

4

‘ab’

3

‘abcd’

‘abcd’

4

‘abcd’

5

‘abcdefgh’

-

#插入失败

-

#插入失败


mysql> use test;   #选择数据库test


mysql> create table char_example(e_char char(5), v_char varchar(5)); #创建数据库表


mysql> insert into char_example values('12345','12345');  #正常插入数据


mysql> insert into char_example values('1 2  ','1 2  ');   #char类型会屏蔽后面隐藏的空格,varchar 不会


mysql>select concat('(',e_char, ')'), concat('(',v_char, ')')  from char_example ; #让char 后面屏蔽的空格原型毕露


2.实战类型


1、 char一定会使用指定的空间,varchar是根据数据来定空间

2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算

3、  如果确定数据一定是占指定长度,那么使用char类型;

4、  如果不确定数据到底有多少,那么使用varchar类型;

5、  如果数据长度超过255个字符而在65535之内,直接使用varchar

6、  如果字符串尾部要保留空格,必须选择varchar


二、TEXT 类型

1.类型表

       TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:


9f14e10bcd494b40835067be26d895c8.png


各种TEXT类型的区别在于允许的长度和存储空间不同。因此,在这几种TEXT类型中,根据需求选取既能满足需要又节省空间的类型即可。


2.特别注意


1)以上各类型无须指定长度!


2)允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节, 那么TEXT 类型可存储 65535/2 = 32767  个中文字符,而varchar(100)可存储100个中文字  符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围。

mysql> use test;   #选择数据库test


mysql> create table text_example(e_text tinytext, v_char varchar(255)); #创建数据库表,e_text 可存储255个字节,v_char可存储255个字符  


mysql> insert into char_example values(90个中文字符,90个中文字符);  #插入失败,utfmb4 用3个字节表示一个中文汉字,会超出tinytext 保存范围


mysql> insert into char_example values(80个中文字符,100个中文字符);  #插入成功    

3.实战建议


1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。超过255字节的只能用varchar或者text;

2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。

3、 text不设置长度, 当不知道属性的最大长度时,适合用text, 能用varchar的地方不用text;

4、 如果都可以选择,按照查询速度: char最快, varchar次之,text最慢。


4.实战练习

创建一个用户信息表,用来存储用户的如下信息:姓名,手机号码,家庭地址,个人简介,性别,年龄,身份证号。数据库表名可定义为userinfo, 同时增加一个列id 用来作为每一条记录的唯一标识,并设为主键,自加!

mysql> use test;   #选择数据库test


mysql> create table userinfo (


id int(11) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键’,


name   varchar(64) DEFAULT NULL COMMENT ‘姓名’,


mobile  char(11)  DEFAULT NULL COMMENT ‘手机号码’,


address varchar(128) DEFAULT NULL COMMENT ‘居住地址’,


description text  DEFAULT NULL COMMENT ‘个人简介-不知道具体的范围,不常更新用text’,


sex     char(1)  DEFAULT NULL COMMENT ‘性别 - 男或女’,


age     tinyint unsigned DEFAULT 0 COMMENT ‘年龄’,


idno    char(18) DEFAULT NULL COMENT ‘身份证号码’


);  

三、ENUM 和 SET 类型

1.ENUM类型

 ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围以列表的形式指定,其基本形式如下:


   属性名  ENUM('值1',  '值2', …, '值n')


       其中,“属性名”参数指字段的名称,“值n”参数表示列表中的第n个值。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。列表中的每个值独有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。默认编号从1开始!


       Enum(‘男’,’女’,‘选择保密’)  # ‘男’=>1  ‘女’=>2  ‘选择保密’=> 3


mysql> use test;   #选择数据库test


mysql> create table enum_example (e_enum enum('男','女','选择保密') ); #创建表


mysql> insert into enum_example values('男');  #插入记录,必须是enum 选项中的值


mysql> insert into enum_example values(1);  #插入记录可以用数值表示


mysql>select e_enum + 0  from enum_example; #查询enum 选项对应的整数值


如果ENUM类型加上了NOT NULL属性,其默认值为取值列表的第一个元素。如果不加NOT NULL属性,ENUM类型将允许插入NULL,而且NULL为默认值。


2.SET类型

  在创建表时,SET类型的取值范围就以列表的形式指定了,其基本形式如下:


   属性名  SET('值1',  '值2', …, '值n')


       其中,属性名参数指字段的名称,“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是由64个元素构成的组合。

mysql> use test;   #选择数据库test


mysql> create table set_example (interest set('足球','追剧','篮球','撩妹') ); #创建表


mysql> insert into set_example values( '足球,撩妹' ); #插入记录,必须是enum 选项中的值


mysql> insert into enum_example values(9);  #插入相应位效果等同,9 =>1001 选择1,4


mysql>select interest+0 from set_example;  #以整数的方式查询


总结


char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。超过255字节的只能用varchar或者text;

2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。

3、 text不设置长度, 当不知道属性的最大长度时,适合用text, 能用varchar的地方不用text;

4、 如果都可以选择,按照查询速度: char最快, varchar次之,text最慢。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL JSON 数据库
Hive【Hive(一)DDL】
Hive【Hive(一)DDL】
|
Java 对象存储
|
Web App开发 应用服务中间件 PHP
|
前端开发 JavaScript Java
揭开 JavaScript 垃圾回收的秘密——一场与内存泄漏的生死较量,让你的代码从此焕然一新!
【8月更文挑战第23天】本文通过多个实例深入探讨了JavaScript中的垃圾回收机制及其对应用性能的影响。首先介绍了基本的内存管理方式,随后分析了变量不再使用时的回收过程。接着,通过事件监听器未被移除及全局变量管理不当等场景展示了常见的内存泄漏问题。最后,文章介绍了使用`WeakRef`和`FinalizationRegistry`等现代API来有效避免内存泄漏的方法。理解并运用这些技术能显著提升Web应用的稳定性和效率。
237 0
|
SQL 数据可视化 关系型数据库
【数据库工具】DBeaver:一款免费的通用数据库工具和 SQL 客户端
【数据库工具】DBeaver:一款免费的通用数据库工具和 SQL 客户端
1500 1
|
算法 物联网 异构计算
基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4FSK调制解调系统的Verilog实现,包括高斯信道模块和误码率统计模块,支持不同SNR设置。系统在Vivado 2019.2上开发,展示了在不同SNR条件下的仿真结果。4FSK调制通过将输入数据转换为四个不同频率的信号来提高频带利用率和抗干扰能力,适用于无线通信和数据传输领域。文中还提供了核心Verilog代码,详细描述了调制、加噪声、解调及误码率计算的过程。
456 11
预训练模型STAR问题之主流生成伪OOD样本的方法有哪些
预训练模型STAR问题之主流生成伪OOD样本的方法有哪些
179 0
|
Java 关系型数据库 数据库
基于springboot家政服务管理平台
基于springboot家政服务管理平台
|
传感器 监控 安全
示例五、气敏传感器
示例五、气敏传感器
428 0