mysql字符串属性_mysql字符串类型数据

CODE_ico.pngico_fork.svg

CREATE TABLE `linkinframe`.`test` (

`id` INT NOT NULL,

`a` CHAR(5) NULL,

`b` VARCHAR(5) NULL,

PRIMARY KEY (`id`));

现在我们往数据库中插入几条数据:

[sql] view plaincopy

CODE_ico.pngico_fork.svg

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘1‘,‘‘,‘‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘2‘,‘1‘,‘1‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘3‘,‘123‘,‘123‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘4‘,‘123 ‘,‘123 ‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘5‘,‘12345‘,‘12345‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘6‘,‘1234567‘,‘1234567‘);

模拟数据库数据显示如下:

e90f48f54ba56318048d6005594fcffb.png

总结:上面的实践证明了一个结论,varchar类型将‘123 ’最后面的空格保留着,而char类型中‘123 ’后面的空格自动删除啦。

char类型和varchar类型是我们最为常用的2种字符串类型,关于这2种类型有如下2点特殊说明:

1,如果插入的字符串的长度已经大于了可以插入的最大值,那么这个时候数据库会报错,说data too long for column。

比如说,现在我们定义2个char类型和varchar类型的字段,长度都为5,但是我们插入的值是‘123456’,那么系统就会阻止这个值的插入然后报错。

关于插入的字符串长度大于数据定义的长度这个问题,资料上是上面这么说的,然后平时编码中使用ORM的时候也明确的遇见过这个错误。

但是我实际sql实践中,比如上面的插入数据库中的最后一条数据,数据库做了截取操作,并没有报错,而是一个警告,控制台输出如下:

Data truncated for column ‘a‘ at row 1。 Data truncated for column ‘b‘ at row 1

2,我们定义长度的时候定义的数据长度,定义的长度就是字符串最大的长度,举个例子,我定义一个name字段,varchar(6),那么该字段最多可以容纳6个汉字。

这点别和Oracle的varchar2类型的字段搞混淆了。Oracle中的字符串类型2个字节表示一个汉字。

举个例子,还是上面的建表语句,现在往其中插入一条字符串的数据,一个超过了字符串定义的长度5,一个没有超过,结果超过的字符串被截断啦。

[sql] view plaincopy

CODE_ico.pngico_fork.svg

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`) VALUES (‘6‘,‘我爱你‘,‘我爱你我爱你‘);

数据库现在显示如下:

ba3e48452a48aac9c9a6fa5726fe8774.png

text类型

text类型是一种特殊的字符串类型。text只能保存字符数据,如新闻的内容等。

text类型包括tinytext,text,mediumtext,longtext。现在将从4种text类型允许的长度和存储空间进行对比,如下图:

dd2cc83128690db2f1bd12d1d1bbc914.png

text类型总结:

这种字符串类型实际中使用并不是太多,一般用来直接存储一个比较大的文本,比如说一篇文章,一篇新闻。

从上图也可以看出,各种text类型的区别在于允许的长度和存储空间不同。因此在这几种text类型中,根据需求选取技能满足需要又能节约空间的类型即可。

enum类型

enum类型又称为枚举类型,在创建表时,enum类型的取值范围就以列表的形式指定了。其基本形式如下:属性名 enum(‘值1‘,‘值2‘,...,‘值n‘),其中属性名参数指定字段的名称,‘值n’参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。注意:

1,enum类型的值只能去列表中的一个元素,其取值列表中最多只能有65535个值。列表中的每个值都有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。

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

OK,现在我们来实际模拟下MySQL中这种数据类型。

建表语句如下:

[sql] view plaincopy

CODE_ico.pngico_fork.svg

CREATE TABLE `linkinframe`.`test` (

`id` INT NOT NULL,

`a` ENUM(‘man‘, ‘woman‘) NULL,

PRIMARY KEY (`id`));

现在我们往数据库中插入几条数据:

[sql] view plaincopy

CODE_ico.pngico_fork.svg

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘1‘, ‘man‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘2‘, ‘woman‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘3‘, null);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘4‘, ‘2‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘5‘, ‘1‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘6‘, ‘huhu‘);

现在数据库显示如下:

27a5435fe31cae8b2358f0ecdc1d3122.png

OK,关于enum类型的总结:

1,使用enum类型,数据库中实际存储的每个枚举的编号,而不是列表中的值,所以我们也可以直接插入每个枚举的编号。

2,实际的实践中,如果我没有在该not null的枚举值上面插入值,或者是随便插入一个值,数据库存储的都为空。

3,实际存储中,如果只能选取列表中的一个值,就选择enum类型,如果需要选取列表中多个值的组合,就需要选择set类型。

set类型

上面也说到了,如果需要选取列表中多个值的组合,就要选择set类型。在创建表时,set类型的取值范围就以列表的形式指定了。其基本形式如下:属性名 set(‘值1‘,‘值2‘,....,‘值n‘)。其中,‘属性名’属性指定字段的名称,‘值n’参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与enum类型一样。注意:

1,set类型的值可以去列表中的一个元素或者多个元素的组合。去多个元素时,不同元素之间用逗号隔开。set类型的值最多只能有64个元素构成。

2,同enum类型一样,列表中的每个值都有一个顺序排列的编号,MySQL中实际存储的是这个编号,而不是列表中的值。

3,插入记录时,set字段中的元素顺序无关紧要,存入MySQL数据库后,数据库系统会自动按照定义时的顺序显示。OK,现在我们来实际操作下数据库这种数据类型:

建表语句如下:

[sql] view plaincopy

CODE_ico.pngico_fork.svg

CREATE TABLE `linkinframe`.`test` (

`id` INT NOT NULL,

`a` SET(‘a‘, ‘b‘, ‘c‘, ‘d‘) NOT NULL,

PRIMARY KEY (`id`));

插入几条语句:

[sql] view plaincopy

CODE_ico.pngico_fork.svg

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘1‘, ‘a‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘2‘, ‘c‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘3‘, ‘a,b‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘4‘, ‘a,b,c,d‘);

INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (‘5‘, ‘a,e‘);

数据库显示如下:

a2ec87a85fb81a04879f3a4a6531bab2.png

关于set类型的总结:

1,set类型和enum类型对于取值在一定范围的离散值很有效。enum类型只能在取值列表中取一个值,set类型可以在取值列表中去多个值。

2,这两种类型的数据都不是直接将数据存入数据库,而是将其列表中的编号存入数据库。

3,资料中说如果随便往这2种类型中插入数据,会报错,但是我自己的实践中并没有报错,而是插入一个null。

4,对于set的话,如果插入多个值,其中有些值合法,有些值不合法,那么只会将合法的插入进去,不合法的不做处理。

mysql字符串类型数据

标签:ora   字节   sni   语句   detail   medium   long   数据类型   cat

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/hurry-up/p/6645492.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值