08、MySQL—字符串型

字符串型

1、Char

定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据


基本语法:

char(L),L代表字符数(中文与英文字母一样),L长度为0到255

2、Varchar

变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)


基本语法:

Varchar(L),L代表字符数,L的长度理论值位0到65535

因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度

如果数据本身小于127个字符:额外开销一个字节;如果大于127个,就开销两个字节

(1) Char和varchar数据存储对比(utf8,一个字符都会占用3个字节)


存储数据


Char(2)


Varchar(2)


Char所占字节


Varchar所占字节


A


A


A


2 * 3 = 6


1 * 3 + 1 = 4


AB


AB


AB


2 * 3 = 6


2 * 3 + 1 = 7

(2) Char和varchar的区别

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

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

说明:

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

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

如果数据长度超过255个字符,不论是否固定长度,都会使用text,不再使用char和varchar

3、Text

文本类型:本质上mysql提供了两种文本类型

Text:存储普通的字符文本

Blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身。

(1) Text:系统中提供的四种text

(2) Tinytext:系统使用一个字节来保存,实际能够存储的数据为:2 ^ 8 + 1

(3) Text:使用两个字节保存,实际存储为:2 ^ 16 + 2

(4) Mediumtext:使用三个字节保存,实际存储为:2 ^ 24 + 3

(5) Longtext:使用四个字节保存,实际存储为:2 ^ 32 + 4

注意:

(1) 在选择对应的存储文本的时候,不用刻意去选择text类型,系统会自动根据存储的数据长度来选择合适的文本类型。

(2) 在选择字符存储的时候,如果数据超过255个字符,那么一定选择text存储

4、Enum

枚举类型:在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果。

如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:那么就使用枚举


基本语法:

enum(数据值1,数据值2…)

系统提供了1到2个字节来存储枚举数据:通过计算enum列举的具体值来选择实际的存储空间:如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。

① 创建表

② 插入数据:合法数据,字段对应的值必须是设定表的时候所确定的值

③ 错误数据:enum有规范数据的功能,能够保证插入的数据必须是设定的范围,其他类型都不可以

④ 枚举enum的存储原理:实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标规则从1开始

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

特性:在mysql中系统是自动进行类型转换的:如果数据碰到“+、-、*、/”系统就会自动将数据转换成 数值,而普通字符串转换成数值为0

范例:查看enum元素的值


Select 字段名 + 0 from 表名;

⑤ 既然实际enum字段存储的结果是数值:那么在进行数据插入的时候,就可以使用对应的数值来进行。

枚举的意义:

(1) 规范数据本身,限定只能插入规定的数据项

(2) 节省存储空间

5、Set

集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,0表示该选项没有被选中。


基本语法:

set(‘值1’,’值2’,’值3’…)

系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元


1个字节:set只能有8个选项


2个字节:set只能有16个选项


3个字节:set只能表示24个选项


8个字节:set可以表示64个选项

Set和enum一样,最终存储到数据字段中的依然是数字而不是真实的字符串

① 创建表

② 插入数据:可以插入多个数据,就是在数据插入的字符串中,使用对应的逗号“,”将选项进行隔开

③ 数据选项所在的数据与数据插入的顺序无关:最终都会变成选项对应的顺序

④ 分析数据存储的方式

(1) 系统将对应的数据选项(设计)按照顺序进行编排:从第一个开始进行占位,每一个都对应一个二进制位。

(2) 数据在存储的时候,如果被选中,那么对应的位的值就为1,否则为0

(3) 系统在进行存储的时候会自动将得到的最终的二进制颠倒过来,然后再进行转换成十进制存储

⑤ 查看数据:按照自动转换成数值来查看

⑥ 既然是数值,那么就可以插入数值来代替实际插入数据

注意:数字插入的前提是对应的二进制位上都有对应的数据项

Set集合的意义: 规范数据、节省存储空间

Enum:单选框

Set:复选框

原文地址:https://www.cnblogs.com/CSAH/p/11135515.html

时间: 2024-08-30 06:50:43

08、MySQL—字符串型的相关文章

mysql 字符串函数

对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -> 50mysql> select ASCII(2); -> 50mysql> select ASCII('dx'); -> 100 也可参见ORD()函数. ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以

Mysql Order By 字符串排序,mysql 字符串order by

Mysql Order By 字符串排序,mysql 字符串order by ============================== ?Copyright 蕃薯耀 2017年9月30日 http://fanshuyao.iteye.com/ 一.问题描述: Mysql排序时如果用的的字段为字符串型的,排序规则是这样的:如1,10,2,20,3,4,5,这种排序是按照字符从第一个字符开始比较出来的,但不是我想要的,我想要的是:1,2,3,4,5--,10,20这种. 二.解决方案 排序时,把

MySQL字符串函数substring:字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活. 1. 字符串截取:left(str, length) mysql> select left('example.com', 3);+-------------------------+| left('example.

MySQL字符串函数、日期时间函数

MySQL字符串函数.日期时间函数 一.常见字符串函数: 1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左.取右 6.LENGTH   获取长度(字节为单位) 7.LTRIM/RTRIM/TRIM 去空格(左/右/自定义) 8.STRCMP  字符串比较 9.CONCAT  字符串拼接 10.SUBSTRING  字符串截取 1.CHAR_LENGTH:获取长度(字符

Mysql字符串字段中是否包含某个字符串,用 find_in_set

有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被‘,’分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL); 添加数据: 1 INSERT INTO users(name, limits)

Mysql字符串函数FIND_IN_SET()的两点用法

概要:该可以查询用逗号分割的字段,以及对结果进行强制排序 首先看一张表: colid vyear area cast ,31,32,21,12 2014 1 15 ,32,33,34,35,21, 2014 2 16 ,33,34,36,39,40 2011 3 17 表中的colid字段的值是以逗号分割, 当我们需要查询这张表中,colid含有32的行, 那么可以用FIND_IN_SET() SQL如下: SELECT * FROM table WHERE FIND_IN_SET('32',

Mysql字符串字段判断是否包含某个字符串的3种方法

方法一: SELECT * FROM users WHERE emails like "%[email protected]%"; 方法二: 利用MySQL 字符串函数 find_in_set(); SELECT * FROM users WHERE find_in_set('[email protected]', emails); 这样是可以的,怎么理解呢? mysql有很多字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必

MySQL字符串函数

字符串大小写转换 MySQL 字符串大小写转化函数有两对: lower(), uppper() 和 lcase(), ucase() mysql> select lower('DDD'); +--------------+ | lower('DDD') | +--------------+ | ddd | +--------------+ mysql> select upper('ddd'); +--------------+ | upper('ddd') | +--------------+

C语言中字符型和字符串型的区别?

C语言中只有字符型类型,没有字符串型类型.字符类型用一个带符号的8位二进制编码表示,其性质与int相同,只是只有一个字节.表示字符的ASCII编码使用其中的0~127,所以要明白字符类型(char)其实是一个一字节整型,并不只用来表示字符.由于C中没有字符串类型,所以在处理字符串时是利用字符型数组来实现的,在字符型数组中一个接一个地存储字符的ASCII编码,并在最后一个字符后加一个'\0'表示这一串字符结束了,就形成所谓“字符串”.