MYSQL基础笔记(七)- 数据类型二

时间:2023-03-09 16:17:20
MYSQL基础笔记(七)- 数据类型二

  字符串类型

  在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set

  char,定长字符串

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

  char(L):L代表length,可以存储长度,单位为字符。最大长度值为255.

  varchar变长字符串

  在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少空间,是根据具体的数据来确定的。

  varchar(L):L表示字符长度,理论长度是65536个字符,但是会多出1到2个字节来确定存储的实际长度。

  例如,varchar(10):存了10个汉字,utf8环境下,10*3+1=31个字节。

            存储3个汉字,3*3+1 = 10(bytes)

  如何选择定长或则是变长字符串呢?

  第一,定长的磁盘空间比较浪费,但是效率高。如果数据基本上确定长度都一样,就是用定长。

  第二,变长比较节约磁盘空间,但是效率低。如果数据不能确定长度,可以采用。

  text,文本字符串

  如果数据量非常大,通常说超过255个字符,就使用文本字符串。

  文本字符串根据存储的数据的格式进行分类:text OR blob.

  Text:存储文字(二进制数据根据实际都是存储路径)

  Blob:存储二进制数据(通常不用)。

  enum,枚举字符串

  事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。

  枚举的使用方式:

  定义:enum(可能出现的元素列表);  -- 如 enum('男','女','妖','保密');

  使用:存储数据,只能存储上面定义好的数据。

  作用:1、规范数据格式,数据只能是规定的数据中的其中一个。枚举实际存储的是数值二不是字符串本身。

     2、节省存储空间(枚举通常有一个别名:单选框)

  在MYSQL中,系统是自动转换数据格式的,而且基本与PHP一样。

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

  集合字符串

  集合和枚举类似:实际存储的是数值,而不是字符串(集合是多选)。

  定义:Set (元素列表)

  使用:可以使用元素列表中的元素(多个),使用逗号分隔。

  集合中没有一个元素。

  集合的强大在于能够规划数据和节省空间,php也可以规范数据,但对于PHP来说效率优先,而且数据的维护可以通过数字进行。PHP没有办法判断数据的在数据库的形式,集合增加PHP的维护成。

  

  MYSQL记录长度

  MYSQL中规定,任何一条记录最长不能超过65535个字节。

  MYSQL记录中:如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL。

  列属性 

  列属性: 真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来保证数据的合法性。

  列属性有很多: NULL/NOT NULL , DEFAULT,PRIMARY KEY,UNIQUE KEY,AUTO_INCREMENT,COMMENT.

  空属性:两个值,NULL(空,默认值)和NOT NULL(不为空)

  列描述: comment,描述,没有实际含义,是专门用来描述字段。

  DEFAULT:默认值关键词。