和MySQL的CHAR和VARCHAR类型详细解释的演变
对MySQL数据库的varchar类型的最大长度是255以下版本中,和数据的范围可以是0 ~ 255。
在mysql5.0.3及以上版本,65535的varchar数据类型支持的长度,这意味着你可以存储65532字节的数据,启动和停止位占用3个字节,也就是说,在接下来的版本中需要使用固定的文本或BLOB格式存储的数据可以在商店的高版本使用varchar变长,这样我们就可以有效地减小数据库文件的大小。
如果写作是大于varchar预设长度,默认将削减部分。
两。详细解释(MySQL5.1):
CHAR和VARCHAR类型是相似的,但他们都以不同的方式存储和检索,其最大长度和是否保留尾部空间也不同。没有案例与转换过程中进行存储或检索。
长度的CHAR和VARCHAR类型声明的最大字符数要保存。例如,char(30)可以把30个字符。
的炭柱的长度是固定的声明的长度在创建表时,长度可从0到255之间的任何值。当char值保存,空间被填充到他们达到指定长度的权利。当char值返回,在尾空间被删除。没有案例与转换过程中进行存储或检索。
在VARCHAR列中的值是一个可变长度的字符串,长度可以被指定为0和65535之间。(这个varchar有效长度最大的行大小的最大值和使用的字符集确定整体的最大长度是65532个字节。
与char,varchar值时保存,只保存需要的字符数,加一个字节记录长度(如果该列的长度超过255,然后用两个字节)。
VARCHAR值不充当它被保存。斯特恩空间仍然保留的值被保存和检索,并与标准SQL线。
如果分配给CHAR或VARCHAR列的列的最大长度超过价值,价值是专做很合适。如果切的性格不是一个空间,一个警告会产生。如果一个非空字符切割,一个错误(而不是警告)的创建和使用一个严格的SQL模式禁用插入值。
下表显示的结果保存各种字符串值字符后(4)和varchar(4)列,说明CHAR和varchar的区别:
价值
char(4)
存储要求
varchar(4)
存储要求
'
'''
4字节
'
1字节
AB
AB
4字节
AB
3字节
ABCD
ABCD
4字节
ABCD
5字节
ABCDEFGH
ABCD
4字节
ABCD
5字节,请注意表中最后一行的值只适用于没有严格模式的情况下。如果MySQL在严格的模式下运行,它不会被保存在列长度上,并且会出现错误。
从字符检索的值(4)和varchar(4)列不一样由于尾部空间是删除从char列在检索检索。
下面的例子用来说明差异:
复制代码代码如下所示:
MySQL >创建表的VC(V varchar(4),C char(4));
查询OK,0行受影响(0.02秒)
MySQL >插入VC值('ab ','ab);
查询OK,1行受影响(0秒)
MySQL >选择concat(V,CONCAT +),从(C + VC);
---------------- ---------------- + + +
| concat(V)| concat(C)|
---------------- ---------------- + + +
| AB +公司+ | |
---------------- ---------------- + + +
1行集(0秒)
在CHAR和VARCHAR列的值进行排序和比较,根据字符集的校对规则指定的列。
请注意,所有MySQL校对规则属于PadSpace班。这说明没有尾巴的空间需要考虑MySQL所有CHAR和VARCHAR值进行比较。
例如:
复制代码代码如下所示:
MySQL创建表的名字(名字字符>(10)、XX varchar(10));
查询OK,0行受影响(0.09秒)
MySQL >插入名称值('monty ','monty);
查询OK,1行受影响(0秒)
MySQL >选择我= 'monty ',你的名字= 'monty '的名字;
----------------------------- ------------------------------- + + +
|我= 'monty姓名='monty| |
----------------------------- ------------------------------- + + +
| 1 | 1 |
----------------------------- ------------------------------- + + +
1行集(0秒)
请注意,MySQL的所有版本都是相同的,并且不受SQLServer模式的影响。
对于填充字符的结束或被忽略时,如果列索引需要一个唯一的值,插入一个字符,只要填充不同值的值,就会导致键列中的复制错误。
char字节是char二进制文件的别名,这是为了确保兼容性。
ASCII码的属性分配设置为CHAR列latin1字符的Unicode属性分配的UCS2字符集。