Mysql数据类型之字符串型

x33g5p2x  于2021-03-14 发布在 Mysql  
字(1.8k)|赞(0)|评价(0)|浏览(281)

字符串类型常用的包括:char, varchar, text, enum, set,分述如下:

6.5.1.定长字符char和变长字符varchar

  • 定长字符类型char:
    适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。
    设定形式:
    字段名称 char(字符个数)
    其特点是:
    1,存储的字符长度固定,最长可设定为255个字符。
    2,如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。
    3,相对varchar类型,其存取速度更快。
  • 变长字符类型varchar:
    适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。
    设定形式:
    字段名称 varchar(字符个数)
    其特点是:
    1,存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532(字节)。
    (1) 注:由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的;
    (2) 英文:一个字符占一个字节;
    (3) 中文(gbk编码):一个字符占2个字节;
    (4) 中文(utf8编码):一个字符占3个字节;
    2,如果实际写入的字符不足设定的长度,就按实际的长度存储。
    3,相对于char字符串,其存取速度相对更慢。
    示例:
    定义一个表,演示char和varchar的使用和区别:


思考题:
一个表中有一个字段为c1,其类型为char(10),另有一个字段为c2,类型为varchar,问:
c2最多可以设置多长?
答:
1,一个表中的行也有一个“最大字节长度的限制”,一行最多存储65532字节。
2,则此时,c2最多可以设置65532-10 = 65522(长度设定)
3,如果c2中存储的全是英文字符,就可以存储65522个
4,如果存储中文:

gbk:最多65522/2 = 32761个
utf8:最多65522/3 = 21840个

6.5.2.text长文本类型

适用于存储“较长的文本内容”,比如文章内容。最长可存储65535个字符。
如果还需要存储更长的文本,可以使用mediumtext(1600万左右)或longtext(40亿左右)。
设定形式:
字段名称 text
text类型的字段不能设置默认值。
text类型虽然是字符类型,但不能设置长度!!!
text类型的数据不存在行中。

6.5.3.enum和set类型

enum类型和set类型都是用于存储“有给定值的可选字符”,比如类似表单中的单选,多选,下拉列表。

  • enum类型(单选类型/枚举类型):
    enum类型通常用于存储表单中的“单选项”的值。
    设定形式:
    enum(‘选项值1’, ‘选项值2’, ‘选项值3’, ....)
    这些选项值都对应了相应的“索引值”,类似索引数组的下标,但是从1开始的。
    即这些选项的索引值分别为:1, 2, 3, 4, .....
    enum类型最多可设定65535个选项。
    示例:
create  table  tab1 (id  int,  edu(‘大学’, ‘中学’, ‘小学’, ‘其他’ )  );
insert  into  tab1 (id, edu) values (1, ‘大学’);

或:

insert  into  tab1 (id, edu) values (1, 2);		//表示中学
  • set类型(多选类型):
    set类型通常用于存储表单中的“多选项”的值。
    设定形式:
    set(‘选项值1’, ‘选项值2’, ‘选项值3’, ....)
    这些选项值都对应了相应的“索引值”,其索引值从1开始,并“依次翻倍”。
    即这些选项的索引值分别为:1, 2, 4, 8, 16, ..... (其实就是2的n次方)
    enum类型最多可设定64个选项值。
    示例:
create  table  tab2 (aihao(‘篮球’, ‘排球’, ‘足球’, ‘中国足球’ )  ); #对应索引值为1,2,4,8
insert  into  tab2( aihao ) values ( ‘篮球’ );

或:

insert  into  tab2 ( aihao ) values ( ‘篮球,排球’ );

或:

insert  into  tab2 ( aihao ) values ( ‘篮球,足球,排球’ );

或:

insert  into  tab2 ( aihao ) values ( 2 );	//表示排球(2)

或:

insert  into  tab2 ( aihao ) values ( 3);		//表示“篮球,排球”(1+2)

或:

insert  into  tab2 ( aihao ) values ( 7);		//表示“篮球,排球,足球”(1+2+4)

基本示例:

使用索引值来插入数据:

相关文章

微信公众号

最新文章

更多