MySql中的字符数据类型

MySql中的varchar类型


1.varchar类型的变动

  MySQL数据库的varchar类型在4.1之下的本被的极其要命长限制也255,其数据范围可是0~255或1~255
依据不同版本数据库来定。在MySQL5.0上述的本中,varchar数据类型的长短支持及了65535,也就是说可
以存放65532只字节的多少,

由始位和结束位占去矣3只字节,也就是说,在4.1要以下版本被待采用一定的TEXT或BLOB格式存放的数码可以使用可变长的varchar来存放在,这样就能有效的滑坡数据库文件的轻重缓急。
  MySQL
数据库的varchar类型在4.1之下的版中,nvarchar(存储的凡Unicode数据类型的字符)不管是一个字符或一个汉字,都满怀为2独字
节 ,一般作为中文或者其它语言输入,这样不轻乱码 ;varchar:
汉字是2只字节,其他字符存为1只字节 ,varchar适合输入英文及数字。

4.0版以下,varchar(20),指的凡20字节,如果存放UTF8汉字时,只能存6只(每个字3字节)
;5.0本以上,varchar(20),指的是20字符,无论存放的凡数字、字母还是UTF8汉字(每个字3字节),都得以存放20独,最特别尺寸是65532许节
;varchar(20)在Mysql4受最要命吗只是是20只字节,但是Mysql5基于编码不同,存储大小为殊,具体产生以下规则:
a)
存储限制
  varchar
字段是拿实际内容单独存储于聚簇索引外,内容开始用1暨2单字节表示其实尺寸(长度逾255时常用2独字节),因此最好深长不能够超越65535。、
b)
编码长度限制

  字符类型若否gbk,每个字符最多占2个字节,最可怜尺寸不克过32766;

  字符类型若为utf8,每个字符最多占3独字节,最酷尺寸不可知跳21845。

  若定义之时光过上述限,则varchar字段会给强行转为text类型,并生warning。
c)
行长度限制
  导致实际使用被varchar长度限制的是一个行定义的长短。
MySQL要求一个履行的概念长度不能够跳65535。若定义的表长度超过这价值,则提示ERROR
1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs


2.CHAR(M), VARCHAR(M)不同之处

  CHAR(M)定义之排的尺寸为固定的,M取值可以啊0~255间,当保存CHAR值时,在它的右侧填充空,格以达到指定的长。当找到CHAR值时,尾部的空格被去除掉。在仓储或找过程被不进行高低写转换。CHAR存储定长数据好便利,CHAR字段上的目录效率级赛,比如定义char(10),那么不论是你存储的数量是否达标了10只字节,都要霸占去10独字
节的半空中,不足之机关用空格填充。

  VARCHAR(M)定义之排的长也可易长字符串,M取值可以为0~65535里头,(VARCHAR的最好特别实用长度由最充分实施大小及下的字符集确定。整体无比要命尺寸是65,532字节)。VARCHAR值保存时只有保留得之字符数,另加一个字节来记录长度(如果列声明的长短逾255,则利用有限单字节)。VARCHAR值保存时无开展填写。当值保存与找时尾部的空格仍保存,符合标准SQL
。varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是休定点长度的,我们唯有略知一二其不可能过10个字符,把它定义为
 

   
 VARCHAR(10)是最最经济的。VARCHAR类型的莫过于尺寸是其的价值的其实尺寸+1。为什么”+1″呢?这一个字节用于保存实际用了多可怜之长。从空间上考虑,用varchar合适;从效率及考虑,用char合适,关键是依据实际情况找到权衡点。CHAR和VARCHAR最老之异便是一个是一定长度,一个凡是只是换长。由于是不过易长,因此实际存储的时节是实际字符串再加上一个记录字符串长度的字节(如果超过255则用简单单字节)。如果分配受CHAR或VARCHAR列的价值过列的极其酷长,则对值进行裁剪使该称。如果给裁掉的字符不是空格,则会发同样久警告。如果裁剪非空格字符,则会招致错误(而无是警告)并经应用严格SQL模式禁用值的插入。

3.
VARCHAR和TEXT、BlOB类型的区别

  VARCHAR,BLOB和TEXT类型是易长型,对于那个储存需求在于列值的骨子里尺寸(在前面的报表中用L表示),而非是在类型的无比酷可能尺寸。例如,一个VARCHAR(10)列能保存最为特别尺寸也10只字符的一个字符串,实际的存储需要是字符串的长短
,加上1个字节以记录字符串的长度。对于字符串’abcd’,
L是4万一存储要求凡5独字节。BLOB和TEXT类型需要1,2,3或者4个字节来记录列值的长度,这取决类型的太要命可能长度。VARCHAR需要定义大小,有65535字节的极端老范围;TEXT则不需要。如果你把一个跨越列类型最酷尺寸的值赋给一个BLOB或TEXT列,值为截断以适合她。

  一个BLOB是一个可知保存可更换多少的数目的二进制的要命目标。4单BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在她们能保存值的太老尺寸方面有所不同。BLOB
可以储存图片,TEXT不行,TEXT只能储存纯文本文件。4单TEXT类型TINYTEXT
TEXT、MEDIUMTEXT和LONGTEXT对许被4只BLOB类型,并且产生同等的不过要命长以及仓储需求。在BLOB和TEXT类型之间的绝无仅有差别是针对性BLOB值的排序和比较以大小写敏感方式履行,而针对TEXT值是大小写不灵动的。换句话说,一个TEXT是一个尺寸写不灵敏的BLOB。


4.总结char,varchar,text区别

  长度的界别,char范围是0~255,varchar最丰富是64k,但是注意这里的64k是总体row的长度,要考虑到另外的column,还有如有not
null的下啊会见占用同样员,对两样的字符集,有效长度还非雷同,比如utf8
的,最多21845,还要除去别的column,但是varchar在相似情况下存储都足够用了。如果遇上了老文本,考虑采用text,最要命能到4G。效率来说基本是char>varchar>text,但是要利用的凡Innodb引擎的话,推荐下varchar代替charchar和varchar可以生出默认值,text不克因定默认值数据库选择适宜的数据类型存储还是雅有必要的,对性有自然影响。这里以琐碎记录点滴画,对于int类型的,如果未待存取负值,最好增长unsigned;对于经常出现在where语句子被之字段,考虑加索引,整形的愈加适合加索引。

网站地图xml地图