当前位置:七道奇文章资讯数据防范MySQL防范
日期: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个字节
请注意上表中最后一行的值只实用不利用严峻情势时;假如MySQL运行在严峻情势,超越列长度不的值不保存,并且会呈现错误.

从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防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .