首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>Mysql教程>资讯:MySQL表设计优化与索引 (五)

MySQL表设计优化与索引 (五)

www.jz123.cn  2010-10-25   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  当存储一个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在比较二进制数据时, 通过字节表示的数值比较的方式进行的, 因为二进制数据相对与基于字符的比较更简单, 也更快。

  记住长度单位是字符, 而不是字节, 一个多字节字符集要多个字节来存储。


上一篇:MySQL表设计优化与索引 (四) 下一篇:MySQL表设计优化与索引 (六)

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图