MySQL表设计优化与索引 (五)
来源:Asp之家 时间:2010-10-25 20:24:00
当存储一个CHAR值时, Mysql会除去尾随空间, 这个行为有点让人困惑, 用一个具体的例子来看一下: 首先 ,创建一个只有一个CHAR(10)字段的表并存储一些值在里面:
mysql> CREATE TABLE char_test( char_col CHAR(10));
mysql> INSERT INTO char_test(char_col) VALUES
-> (’string1′), (‘ string2′), (’string3 ‘);
然后检索这些值, 尾部空间被除掉了:
mysql> SELECT CONCAT(“‘”, char_col, “‘”) FROM char_test;
+—————————-+
| CONCAT(“‘”, char_col, “‘”) |
+—————————-+
| ’string1′ |
| ‘ string2′ |
| ’string3′ |
+—————————-+
如果存储同样的值在VARCHA(10)的字段里, 在检索的时候得到的结果如下:
mysql> SELECT CONCAT(“‘”, varchar_col, “‘”) FROM varchar_test;
+——————————-+
| CONCAT(“‘”, varchar_col, “‘”) |
+——————————-+
| ’string1′ |
| ‘ string2′ |
| ’string3 ‘ |
+——————————-+
数据的存储是存储引擎相关的, 并不是所有的存储引擎用同样的方式来处理定长和变长类型。Memory存储引擎使用定长的行, 因而它分配尽可能多的空间给变长字段来存储数据。 而Falcon则使用变长字段来存储, 即使对于CHAR字段也是如此。 但是填充和去尾是一致de 这是因为这个是 油MySql服务器自己处理的。
CHAR和VCHAR的兄弟类型分别是存储二进制数据的BINARY和VARBINARY, 二进制字符串与普通的字符长相似, 不过他们是以字节存储的, 而不是字符,填充也不一样 , Mysql用\0(0 字节)而不是空格填充二进制数据, 而在检索时不会把后面的填充值去掉。
对于需要存数二进制数据的活着需要Mysql对值进行字节的比较而不是基于字符的比较时, 二进制数据类型非常哟用。基于字节的比较的优势不只是大小写不敏感的好处, Mysql在比较二进制数据时, 通过字节表示的数值比较的方式进行的, 因为二进制数据相对与基于字符的比较更简单, 也更快。
记住长度单位是字符, 而不是字节, 一个多字节字符集要多个字节来存储。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SQL Server中两种修改对象所有者的方法
网站升级兼容firefox经验小谈
![](https://img.aspxhome.com/file/UploadPic/up/2007102823141550.jpg)
Microsoft SQL Server 2000安装问题集锦
用Dreamweaver MX设计各种网页鼠标样式
讲解MaxDB数据库和MySQL的数据库的主要差别
Z-Blog垃圾留言判定新方法
Yahoo!网站性能最佳体验的34条黄金守则—内容
![](https://img.aspxhome.com/file/UploadPic/up/2008052914062462.gif)
玩转CSS3色彩[译]
![](https://img.aspxhome.com/file/UploadPic/20101/13/01-80s.jpg)
form的submit方法和submit事件(onsubmit)
在SQL Server 2005数据库中更改数据架构
分享很实用的css圆角写法[百度有啊提取]
好用的JS图片预加载类
asp无组件备份与还原数据库
非常详细的IFRAME的属性参考手册
Oracle学习笔记(一)
WinHTTP Services 5.1 参考资料
Access 2003开发者扩展工具集概述
ORACLE数据库事务隔离级别介绍
![](https://img.aspxhome.com/file/UploadPic/20128/21/201282111636652s.jpg)