日期:2012-06-27 21:30:00 来源:本站整理
MySQL中CHAR和VARCHAR范例演变和详解[MySQL防范]
本文“MySQL中CHAR和VARCHAR范例演变和详解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、演变:
MySQL数据库的varchar范例在5.0.3以下的版本中的最大长度限制为255,其数据范围可以是0~255.
在MySQL5.0.3及以上的版本中,varchar数据范例的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和完毕位占去了3个字节,也就是说,在5.0.3以下版本中需求利用固定的TEXT或BLOB格局存放的数据可以在高版本中利用可变长的varchar来存放,这样就可以有效的削减数据库文件的大小.
假如在varchar中写入大于设定的长度,默许情形下会截去背面的部份.
2、详解(MySQL5.1):
CHAR和VARCHAR范例近似,但它们保存和检索的方法差别.它们的最大长度和能否尾部空格被保存等方面也差别.在存储或检索历程中不举行大小写转换.
CHAR和VARCHAR范例声明的长度表示你想要保存的最大字符数.比方,CHAR(30)可以占用30个字符.
CHAR列的长度固定为成立表时声明的长度.长度可认为从0到255的任何值.当保存CHAR值时,在它们的右边填充空格以到达指定的长度.当检索到CHAR值时,尾部的空格被删撤除.在存储或检索历程中不举行大小写转换.
VARCHAR列中的值为可变长字符串.长度可以指定为0到65,535之间的值.(VARCHAR的最大有效长度由最大行大小和利用的字符集肯定.整体最大长度是65,532字节).
同CHAR比较,VARCHAR值保存时只保存需求的字符数,另加一个字节来记录长度(假如列声明的长度超越255,则利用两个字节).
VARCHAR值保存时不举行填充.当值保存和检索时尾部的空格仍保存,符合尺度SQL.
假如分配给CHAR或VARCHAR列的值超越列的最大长度,则对值举行裁剪以使其合适.假如被裁掉的字符不是空格,则会产生一条告诫.假如裁剪非空格字符,则会造成错误(而不是告诫)并通过利用严峻SQL情势禁用值的插入.
下面的表显示了将各种字符串值保存到CHAR(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个字节 |
从CHAR(4)和VARCHAR(4)列检索的值并不老是相同,因为检索时从CHAR列删除了尾部的空格.
通过下面的例子阐明该差别:
复制代码 代码以下:
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)
按照分配给列的字符集校对法则对CHAR和VARCHAR列中的值举行排序和对比.
请注意全部MySQL校对法则属于PADSPACE类.这阐明在MySQL中的全部CHAR和VARCHAR值对比时不需求考虑任何尾部空格.
比方:
复制代码 代码以下:
mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');
Query OK, 1 row affected (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版本均如此,并且它不受SQL服务器情势的影响.
关于尾部填充字符被裁剪掉或对比时将它们轻忽掉的情形,假如列的索引需求唯一的值,在列内插入一个只是填充字符数差别的值将会造成复制键值错误.
CHAR BYTE是CHAR BINARY的别名.这是为了保证兼容性.
ASCII属性为CHAR列分配latin1字符集.UNICODE属性分配ucs2字符集.
以上是“MySQL中CHAR和VARCHAR范例演变和详解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论