Mysql学习历程基本语法(8)-字符串类型

来源:互联网 发布:龚琳娜山中问答知乎 编辑:程序博客网 时间:2024/06/11 05:32

字符串类型分为char  varchar   text   blob  enum    set


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

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

变长字符串varchar:分配空间时按照最大的空间分配;但实际上最终用了多少,根据具体数据确定

varchar(L):L代表字符长度,理论长度是65536个字符,会多出1到两个字节确定实际存储长度;


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

定长的磁盘空间比较浪费,但是效率高;如果数据基本上确定长度都一样,就使用定长,如身份证,电话号码,手机号;  变长的磁盘空间比较节省,但是效率低,如果数据不能确定长度,如姓名,地址等;


文本字符串:超过255个字符一般使用文本字符串text

根据存储的 数据的格式分为text和blob;text存储文字;blob存储二进制数据;


枚举字符串enum  枚举选项量65536

定义:enum(可能出现的列表)  例子 enum('男','女')

枚举的作用:规范数据格式,数据只能是规定的数据的其中一个;节省存储空间(枚举别名:单选框)枚举实际存储的是数值;

证明枚举实际存储的是数值:将数据取出来加0就可以判断原来数据存的到底是字符串还是数值;如果是字符串结果永远是0,否则是其他值

枚举实际规律:按元素出现顺序,从1开始编号

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

因为枚举实际存储的是数值,可以直接插入数值。



集合字符串set:实际存储的是数值,而不是字符串,集合是多选;

定义:set(元素列表);

create table my_set(

hobby set('篮球','足球','乒乓球','羽毛球','网球','台球')

)charset utf8;

insert into my_set values('足球,台球,网球');

insert into my_set values(3);

select hobby+0,hobby from my_set;


集合中每一个元素对应一个二进制位,被选中为1,没有则为0,最后整个数反过来;集合中元素没有顺序,最终系统都会去匹配顺序;集合强大在于能规范数据和节省空间;


MYSQL中规定任何一条记录最长不能超过65535个字节(varchar永远达不到理论值);

varchar在utf8和gbk下的实际最大值为:21844和32766个字符;若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning;

MYSQL中如果任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(若想释放NULL所占用字节:必须保证所有字段都不允许为空);


MYSQL中text文本字符串,不占用记录长度;额外存储,但是text文本字符串也是属于记录的一部分,一定需要占据记录中的部分长度:10个字节(保存数据的地址长度).




原创粉丝点击