MySQL中数据类型介绍,MySQL中CHA福特Explorer和VARC
一、MySQL的数据类型
根本满含以下中国共产党第五次全国代表大会类:
大背头品种:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECorollaL
字符串类型:CHAPAJERO、VARCHAHaval、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日子类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINAWranglerY、VARBINA奥德赛Y、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、吉优metryCollection等
1、整型
MySQL数据类型 | 含义(有符号) |
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
取值范围假设加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
int(m)里的m是表示SELECT查询结果聚集的呈现上涨的幅度,并不影响其实的取值范围,未有影响到体现的肥瘦,不精晓那几个m有啥用。
2、浮点型(float和double)
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
设多个字段定义为float(6,3),假设插入一个数123.45678,实际数据Curry存的是123.457,但总个数还以实际为准,即6位。整数有的最大是3位,如若插入数12.123456,存款和储蓄的是12.1234,假使插入12.12,存储的是12.1200.
3、定点数
浮点型在数据库中寄存的是类似值,而固定类型在数据库中贮存的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。
4、字符串(char,varchar,_text)
MySQL数据类型 | 含义 |
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存款和储蓄的字符串末尾不可能有空格,varchar不制止此。
2.char(n) 定位长度,char(4)不管是存入多少个字符,都将占用4个字节,varchar是存入的其实字符数+1个字节(n<=255)或2个字节(n>255),
因此varchar(4),存入3个字符将侵占4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可钦命n,text无法钦点,内部存款和储蓄varchar是存入的其实字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字
节。
2.text类型不能够有暗中认可值。
3.varchar可径直开立索引,text创设索引要钦定前有个别个字符。varchar查询速度快于text,在都创建索引的情况下,text的目录仿佛不起功能。
5.二进制数据(_Blob)
1._BLOB和_text存款和储蓄格局不相同,_TEXT以文件格局存款和储蓄,韩文存款和储蓄区分轻重缓急写,而_Blob是以二进制方式存款和储蓄,不分大小写。
2._BLOB存款和储蓄的数量只好完全读出。
3._TEXT可以钦点字符集,_BLO不用钦赐字符集。
6.日期时间项目
MySQL数据类型 | 含义 |
date | 日期 '2008-12-2' |
time | 时间 '12:25:36' |
datetime | 日期时间 '2008-12-2 22:06:44' |
timestamp | 自动存储记录修改时间 |
若定义三个字段为timestamp,这么些字段里的岁月数额会随别的字段修改的时候自动刷新,所以那么些数据类型的字段能够存放那条记下最终被改换的时间。
数据类型的属性
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
复制代码 代码如下:
一、演变:
二、MYSQL数据类型的尺寸和限量
各数据类型及字节长度一览表:
数据类型 | 字节长度 | 范围或用法 |
Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 |
TinyInt | 1 | 整数[0,255] |
SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] |
MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] |
BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
Double(M,D) | 8 | 双精度浮点。 |
Decimal(M,D) | M+1或M+2 | 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 |
Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 |
TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 |
Year | 1 | 以YYYY的格式显示。比如:2009 |
Char(M) | M |
定长字符串。
|
VarChar(M) | M | 变长字符串,要求M<=255 |
Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
Tiny Text | Max:255 | 大小写不敏感 |
Text | Max:64K | 大小写不敏感 |
Medium Text | Max:16M | 大小写不敏感 |
Long Text | Max:4G | 大小写不敏感 |
TinyBlob | Max:255 | 大小写敏感 |
Blob | Max:64K | 大小写敏感 |
MediumBlob | Max:16M | 大小写敏感 |
LongBlob | Max:4G | 大小写敏感 |
Enum | 1或2 | 最大可达65535个不同的枚举值 |
Set | 可达8 | 最大可达64个不同的值 |
Geometry | ||
Point | ||
LineString | ||
Polygon | ||
MultiPoint | ||
MultiLineString | ||
MultiPolygon | ||
GeometryCollection |
mysql> select binary 'ABCD'='abcd' COM1, 'ABCD'='abcd' COM2;
+--------+-----------+
| COM1 | COM2 |
+--------+-----------+
| 0 | 1 |
+---------+-----------+
1 row in set (0.00 sec)
MySQL数据库的varchar类型在5.0.3之下的版本中的最大尺寸限制为255,其数额范围能够是0~255。
三、使用建议
1、在钦点数据类型的时候平时是运用从小原则,举例能用TINY INT的最棒就不用INT,能用FLOAT类型的就无须DOUBLE类型,那样会对MYSQL在运作功效上进步极大,特别是时局据量测量检验条件下。
2、无需把数据表设计的太过复杂,作用模块上有别恐怕对于前期的保卫安全更为有援救,严谨出现大杂烩数据表
3、数据表和字段的起名字也是一门学问
4、设计数据表结构以前请先想象一下是你的房屋,可能结果会特别客观、高效
5、数据库的结尾设计结果一定是功能和可增加性的折中,偏向任何一方都以不妥的
(仅独有些而已!4.*以前)
因为部分MySQL极度是4.*以前的对于华语寻找会有离谱赖的主题素材,能够在寻觅的时候增加binary。
建表:
在MySQL5.0.3及以上的版本中,varchar数据类型的尺寸帮助到了65535,也正是说能够贮存65535个字节的数量,开头位和竣事位占去了3个字节,相当于说,在5.0.3之下版本中必要动用固定的TEXT或BLOB格式存放的数额足以在高版本中选拔可变长的varchar来存放,那样就能够管用的收缩数据库文件的尺寸。
慎选数据类型的骨干尺度
前提:使用契合累积引擎。
慎选条件:依据选定的储存引擎,分明哪些抉择适当的数据类型。
下边包车型地铁取舍格局按存款和储蓄引擎分类:
- MyISAM 数据存款和储蓄引擎和数据列:MyISAM数据表,最佳使用固定长度(CHAHaval)的数目列取代可变长度(VARCHACRUISER)的数据列。
- MEMO大切诺基Y存款和储蓄引擎和数据列:MEMO昂CoraY数据表前段时间都采纳一定长度的数量行存储,由此不论使用CHAPAJERO或VARCHAHaval列都不曾关系。两个都以作为CHA奥迪Q5类型管理的。
- InnoDB 存款和储蓄引擎和数据列:提议利用 VARCHA奥迪Q7类型。
对于InnoDB数据表,内部的行存款和储蓄格式未有分别固定长度和可变长度列(全部数据行都使用指向数据列值的头指针),因而在本质上,使用一定长度的CHASportage列不料定比使用可变长度VARCHA翼虎列轻便。因此,首要的习性因素是数据行使用的存放总数。由于CHA揽胜平均占用的上空多于VARCHAENCORE,由此使用VARCHA卡宴来最小化需求管理的数据行的囤积总数和磁盘I/O是相比好的。
下边说一下永远长度数据列与可变长度的数据列。
复制代码 代码如下:
假定在varchar中写入过量设定的尺寸,暗中同意意况下会截去前边的一部分。
char与varchar
CHA昂科拉和VARCHA逍客类型类似,但它们保存和探寻的方式不相同。它们的最大尺寸和是不是尾巴部分空格被保留等地点也比不上。在累积或探求进程中不进行高低写转变。
上边包车型大巴表突显了将种种字符串值保存到CHA卡宴(4)和VARCHA凯雷德(4)列后的结果,表明了CHA本田CR-V和VARCHA中华V之间的歧异:
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
'' | ' ' | 4个字节 | '' | 1个字节 |
'ab' | 'ab ' | 4个字节 | 'ab ' | 3个字节 |
'abcd' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
'abcdefgh' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
请小心上表中最终一行的值只适用不应用严酷格局时;如若MySQL运转在严谨形式,超过列长度不的值不保存**,况且汇合世谬误。
从CHA奔驰G级(4)和VARCHARAV4(4)列检索的值并不总是一样,因为检索时从CHA宝马X3列删除了尾巴部分的空格。通过上边包车型客车事例表达该差别:
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab + | ab+ |
+----------------+----------------+
1 row in set (0.00 sec)
create TABLE usertest (
id int(9) unsigned NOT NULL auto_increment,
username varchar(30) NOT NULL default '',
primary key (id)
)
二、详解(MySQL5.1):
text和blob
在使用text和blob字段类型时要注意以下几点,以便更好的抒发数据库的习性。
①BLOB和TEXT值也会唤起本人的一些难题,特别是施行了汪洋的删除或更新操作的时候。删除这种值会在数据表中留下不小的"空洞",今后填入这一个"空洞"的记录大概长度差异,为了增加质量,建议按期接纳OPTIMIZE TABLE 功用对那类表进行零散整理.
②利用合成的(synthetic)索引。合成的索引列在有个别时候是行得通的。一种方法是依赖其余的列的原委创立叁个散列值,并把这么些值存款和储蓄在单独的数据列中。接下来你就能够因此查找散列值找到数据行了。可是,大家要留心这种技能只可以用于标准相配的询问(散列值对于类似<或>=等范围寻觅操作符 是平昔不用处的)。大家得以采用MD5()函数生成散列值,也可以使用SHA1()或CRC32(),恐怕利用本人的应用程序逻辑来计量散列值。请牢记数值型散列值能够非常高作用地囤积。一样,若是散列算法生成的字符串带有尾巴部分空格,就无须把它们存款和储蓄在CHA福睿斯或VARCHAEscort列中,它们相会对尾部空格去除的震慑。
合成的散列索引对于那多少个BLOB或TEXT数据列极其有用。用散列标记符值查找的快慢比寻觅BLOB列本人的快慢快非常多。
③在不须求的时候防止予检查索大型的BLOB或TEXT值。比如,SELECT *询问就不是很好的主张,除非您能够规定作为约束标准的WHERE子句只会找到所急需的数据行。不然,你大概并不是目标地在网络上传输大量的值。那也是 BLOB或TEXT标识符音讯存款和储蓄在合成的索引列中对大家具有帮助的例子。你能够寻找索引列,决定这一个急需的数据行,然后从合格的数量行中检索BLOB或 TEXT值。
④把BLOB或TEXT列分离到独门的表中。在好几处境中,借使把这一个数量列移动到第二张数据表中,可以令你把原数据表中 的数据列转换为牢固长度的多少行格式,那么它正是有含义的。那会回退主表中的碎片,让你拿走固定长度数据行的性质优势。它还使您在主数据表上运行SELECT *查询的时候不会通过互联网传输大批量的BLOB或TEXT值。
布署数据:
CHAEnclave和VARCHA景逸SUV类型类似,但它们保存和查找的章程各异。它们的最大尺寸和是不是尾巴部分空格被保留等地点也不如。在仓库储存或索求进度中不实行高低写调换。
浮点数与确定地点数
为了能够唤起我们的珍视,在介绍浮点数与一定数从前先让大家看二个例证:
mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1 | c2 |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)
从上面包车型大巴例证中大家看见c1列的值由131072.32化为了131072.31,那正是浮点数的不精确性产生的。
在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。
浮点数相对于确定地点数的优点是在尺寸一定的意况下,浮点数能够代表越来越大的数目范围;它的短处是会挑起精度难点。在此后有关浮点数和定点数的应用中,我们要铭记在心以下几点:
- 浮点数存在标称误差难题;
- 对货币等对精度敏感的数目,应该用定点数表示或存款和储蓄;
- 编程中,假设用到浮点数,要极其注意引用误差难点,并尽量防止做浮点数相比较;
- 要在乎浮点数中有的特殊值的拍卖。
ref:
复制代码 代码如下:
CHA奥迪Q5和VARCHAENCORE类型声明的尺寸表示你想要保存的最大字符数。举个例子,CHAEscort(30)能够侵夺二十多个字符。
insert into usertest (username) VALUES('美文');
insert into usertest (username) VALUES('U.S.类型');
insert into usertest (username) VALUES('李文');
insert into usertest (username) VALUES('老唐');
insert into usertest (username) VALUES('梦漂');
insert into usertest (username) VALUES('龙武');
insert into usertest (username) VALUES('夏');
CHA陆风X8列的尺寸固定为创制表时申明的长短。长度可感到从0到255的其他值。当保存CHAR值时,在它们的侧边填充空格以完毕内定的尺寸。当检索到CHA智跑值时,尾部的空格被剔除掉。在仓储或探索进程中不实行高低写调换。
例如:select * from usertest where username like '%夏%'
,结果七条记下都出来了,相比窝火。
假使应用=并不是like的时候,select * from usertest where username = '夏'
,只现出三个结出。因为mysql 的LIKE操作是依据ASCII
操作的,所以LIKE的时候是唯恐有毛病的。难题继续:假诺再增多:
VARCHA昂Cora列中的值为可变长字符串。长度能够内定为0到65,535里面包车型地铁值。(VARCHA库罗德的最大使得长度由最大行大小和选拔的字符集明确。全部最大尺寸是65,532字节)。
复制代码 代码如下:
同CHA奥迪Q7相比,VARCHA揽胜值保存时只保留须求的字符数,另加五个字节来记录长度(假如列注解的长度超越255,则选用三个字节)。
insert into usertest (username) VALUES('文');
insert into usertest (username) VALUES('唐');
VARCHA奥迪Q5值保存时不举行填写。当班值日保存和探究时尾巴部分的空格仍保留,相符规范SQL。
可能使用select * from usertest where username = '夏'
,结果要么出现3条记下,又苦恼了。解决办法如下:
1.在create的时候就利用binary,并不是在query的时候加。
如若分配给CHA凯雷德或VARCHAGL450列的值超越列的最大尺寸,则对值进行裁剪以使其适合。若是被炒蛇头鱼的字符不是空格,则会生出一条警告。假诺裁剪非空格字符,则会变成错误(并不是警告)并通过使用严俊SQL形式禁止使用值的插入。
复制代码 代码如下:
下边包车型大巴表显示了将种种字符串值保存到CHA凯雷德(4)和VARCHAKoleos(4)列后的结果,表明了CHA昂科威和VARCHA途锐之间的差异:
username varchar(30) BINAPRADOY NOT NULL default '',
假诺表已经济建设好了,使用:
alter table usertest modify username varchar(32) binary;
来就该表的习性。
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
'' | ' ' | 4个字节 | '' | 1个字节 |
'ab' | 'ab ' | 4个字节 | 'ab ' | 3个字节 |
'abcd' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
'abcdefgh' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
2.在query的时候增进binary,select * from usertest where username like binary '%夏%' ,就足以正确的询问出一条记下来。
请小心上表中最终一行的值只适用不利用严厉方式时;如若MySQL运维在严俊方式,超过列长度不的值不保留,况兼会师世错误。
char使用一定长度的长空扩充仓库储存,char(4)存款和储蓄4个字符,依据编码格局的例外占用区别的字节,gbk编码格局,不论是汉语仍然俄文,种种字符占用2个字节的空间,utf8编码情势,每一个字符占用3个字节的上空。
万一急需仓库储存的字符串的长短跟全数值的平分长度相差非常的小,切合用char,如MD5。
对此时常改动的值,char优于varchar,原因是定点长度的行不轻易爆发碎片。
对此非常短的列,char优于varchar,原因是varchar必要万分多少个或多个字节存款和储蓄字符串的长度。
从CHACR-V(4)和VARCHALX570(4)列车检查索的值并不总是一样,因为检索时从CHAGL450列删除了尾巴部分的空格。
因此下边包车型地铁例证表达该出入:
varchar保存可变长度的字符串,使用额外的三个或四个字节存款和储蓄字符串长度,varchar(10),除了必要仓库储存12个字符,还需求1个字节存款和储蓄长度音信(10),超越255的尺寸必要2个字节来存款和储蓄
不等:Myisam引擎中动用ROW_FORMAT=FIXED时,每行使用一样的长空,造成浪费
复制代码 代码如下:
char和varchar前面借使有空格,char会自动去掉空格后存款和储蓄,varchar纵然不会去掉空格,但在实行字符串相比时,会去掉空格进行比较
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
复制代码 代码如下:
mysql> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.00 sec)
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | YES | | NULL | |
| addr | char(8) | YES | | NULL | |
| bn | varbinary(4) | YES | | NULL | |
| b | binary(8) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
+----------------------+----------------------+
| concat("$",name,"$") | concat("$",addr,"$") |
+----------------------+----------------------+
| $asdf$ | $a$ |
| $asdf$ | $a$ |
| $a $ | $a$ |
| $a$ | $a$ |
| $t a$ | $a$ |
+----------------------+----------------------+
mysql> select * from zcy where name='a ';
//由于name是varchar,比较时,'a '自动调换为'a'
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 3 | a | a | ab | ab |
| 4 | a | a | ab | a |
+----+------+------+------+----------+
2 rows in set (0.00 sec)
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab + | ab+ |
+----------------+----------------+
1 row in set (0.00 sec)
mysql> select * from zcy where name='a';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 3 | a | a | ab | ab |
| 4 | a | a | ab | a |
+----+------+------+------+----------+
2 rows in set (0.00 sec)
凭借分配给列的字符集核查法规对CHAHaval和VARCHA汉兰达列中的值举行排序和比较。
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | YES | | NULL | |
| addr | char(8) | YES | | NULL | |
| bn | varbinary(4) | YES | | NULL | |
| b | binary(8) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
+--------------------+-------------------+
| concat("$",bn,"$") | concat("$",b,"$") |
+--------------------+-------------------+
| $ab a$ | NULL |
| $ab $ | $ab $ |
| $ab$ | $ab $ |
| $ab $ | $a $ |
| NULL | $a $ |
| NULL | $abcde $ |
| NULL | $abcd1234$ |
+--------------------+-------------------+
请小心有所MySQL核对准绳属于PADSPACE类。那表明在MySQL中的全体CHAEscort和VARCHA景逸SUV值相比时无需思索别的尾巴部分空格。
binary保存二进制字符串,它保存的是字节并非字符,没有字符集限制
binary(8)能够保存8个字符,每一个字符占1个字节,共占8个字节
开展相比较时是按字节实行相比,并不是按字符(char),按字节相比较比字符简单便捷
按字符比较不区分轻重缓急写,而binary区分大小写,结尾使用 填充,并不是空格
例如:
复制代码 代码如下:
复制代码 代码如下:
mysql> select * from zcy where b='a 凤凰彩票投注网,0 ';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 5 | t a | a | NULL | a |
+----+------+------+------+----------+
mysql> select * from zcy where b='a ';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 4 | a | a | ab | a |
+----+------+------+------+----------+
mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.09 sec)
varbinary保存变长的字符串,后边不会补
mysql> select * from zcy where bn='ab';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 3 | a | a | ab | ab |
+----+------+------+------+----------+
1 row in set (0.01 sec)
mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');
Query OK, 1 row affected (0.00 sec)
mysql> select * from zcy where bn='ab ';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 2 | asdf | a | ab | ab |
+----+------+------+------+----------+
1 row in set (0.00 sec)
mysql> SELECT myname = 'Monty ', yourname = 'Monty ' FROM names;
+-----------------------------+-------------------------------+
| myname = 'Monty ' | yourname = 'Monty ' |
+-----------------------------+-------------------------------+
| 1 | 1 |
+-----------------------------+-------------------------------+
1 row in set (0.00 sec)
mysql> select * from zcy where bn='ab ';
+----+------+------+------+----------+
| id | name | addr | bn | b |
+----+------+------+------+----------+
| 4 | a | a | ab | a |
+----+------+------+------+----------+
1 row in set (0.00 sec)
请介意有所MySQL版本均如此,而且它不受SQL服务器格局的震慑。
MySql中Blob与Text的区别
对于尾巴部分填充字符被裁剪掉或相比较时将它们忽视掉的情状,若是列的目录须要独一的值,在列内插入三个只是填充字符数分歧的值将会变成复制键值错误。
BLOB是二个二进制大对象,能够容纳可变多少的数码。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大尺寸差异。
CHACR-V BYTE是CHA科雷傲 BINAWranglerY的外号。那是为着保险宽容性。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这个对应4种BLOB类型,有同一的最大尺寸和积存供给。
ASCII属性为CHA奥迪Q5列分配latin1字符集。UNICODE属性分配ucs2字符集。
BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列未有字符集,並且排序和相比基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的 核查法则对值进行排序和相比。
你只怕感兴趣的篇章:
- mysql中char与varchar的不同深入分析
- MySQL数据库varchar的限定法规说明
- Mysql varchar大小长度难点介绍
- mysql VARCHARubicon的最大尺寸到底是多少
- MySQL数据类型varchar详解
- mysql如何处理varchar与nvarchar类型中的特殊字符
- MySQL中VARCHA锐界与CHA奇骏格式数据的分别
在TEXT或BLOB列的仓库储存或查究进程中,一纸空文大小写调换。
当未运维在严刻形式时,若是你为BLOB或TEXT列分配二个超过该列类型的最大尺寸的值值,值被截取以管教相符。假使截掉的字符不是空格,将会发生一条警告。使用严俊SQL格局,会发出错误,何况值将被驳回实际不是截取并交付警告。
在抢先四分之二方面,可以将BLOB列视为能够丰富大的VARBINA牧马人Y列。同样,能够将TEXT列视为VARCHALAND列。BLOB和TEXT在以下多少个方面分裂于VARBINAEnclaveY和VARCHA昂Cora:
·当保存或检索BLOB和TEXT列的值时不删除后面部分空格。(那与VARBINA福特ExplorerY和VARCHACR-V列一样)。
请留神比较时将用空格对TEXT举行扩展以相符比较的对象,正如CHAEvoque和VARCHA智跑。
·对于BLOB和TEXT列的目录,必须内定索引前缀的长短。对于CHA本田CR-V和VARCHASportage,前缀长度是可选的。
·BLOB和TEXT列不能够有 暗中同意值。
LONG和LONG VARCHA途乐对应MEDIUMTEXT数据类型。那是为着保障包容性。假设TEXT列类型应用BINA奥迪Q5Y属性,将为列分配列字符集的二元 查对准则。
MySQL连接程序/ODBC将BLOB值定义为LONGVARBINASportageY,将TEXT值定义为LONGVARCHA本田CR-V。
出于BLOB和TEXT值大概会那多少个长,使用它们时大概遭受有个别封锁:
·当排序时只使用该列的前max_sort_length个字节。max_sort_length的 默许值是1024;该值能够在开发银行mysqld服务器时使用--max_sort_length选项实行改换。
运维时扩张max_sort_length的值能够在排序或组合时使越来越多的字节有含义。任何客商端能够改造其会话max_sort_length变量的值:
复制代码 代码如下:
mysql> SET max_sort_length = 2000;
mysql> SELECT id, comment FROM tbl_name
-> ORDER BY comment;
当您想要使超越max_sort_length的字节有含义,对含长值的BLOB或TEXT列使用GROUP BY或OEvoqueDER BY的另一种方法是将列值转变为牢固长度的靶子。规范措施是采用SUBSTPRADOING函数。比方,上面包车型大巴话语对comment列的三千个字节实行排序:
复制代码 代码如下:
mysql> SELECT id, SUBSTRING(comment,1,2000) FROM tbl_name
-> ORDER BY SUBSTRING(comment,1,2000);
·BLOB或TEXT对象的最大尺寸由其项目明确,但在客商端和服务器之间实际可以传递的最大值由可用内部存款和储蓄器数量和通讯缓存区大小明确。你能够通过改动max_allowed_packet变量的值更换消息缓存区的尺寸,但无法分裂一时候修改服务器和客户端程序。举个例子,能够利用mysql和mysqldump来改动客户端的max_allowed_packet值。
各样BLOB或TEXT值分别由中间分配的对象表示。那与其余列类型形成相比,前面一个是当展开表时为每1列分配存款和储蓄引擎。
你恐怕感兴趣的稿子:
- MySQL中Binary Log二进制日志文件的基本操作命令小结
- MySQL中的数据类型binary和varbinary详解
本文由凤凰平台注册开户发布于MySQL数据库,转载请注明出处:MySQL中数据类型介绍,MySQL中CHA福特Explorer和VARC
关键词:
下一篇:没有了