小型网站开发教程,wordpress自适应小说,网站的背景图怎么做的,网站栏目做跳转后不显示今天看《高性能MySQL(第四版)》,讲char,varchar时说“当存储CHAR值时#xff0c;MySQL删除所有尾随空格。如果需要进行比较#xff0c;值会用空格填充。”感觉这两句话有冲突啊#xff0c;便研究了下。 对于具体的问题#xff0c;当然官方文档是最好的#xff0c;The CHAR… 今天看《高性能MySQL(第四版)》,讲char,varchar时说“当存储CHAR值时MySQL删除所有尾随空格。如果需要进行比较值会用空格填充。”感觉这两句话有冲突啊便研究了下。 对于具体的问题当然官方文档是最好的The CHAR and VARCHAR Types推荐阅读全文。 原来并不是“如果需要进行比较”而是因为是定长会用空格填充。 那么就想到了一个问题为什么要填充。为什么用空格填充。网上没找到相关资料我试着回答下就是猜的
为什么填充 以char(10)为例这里的10指10个字符char(10)到底占用多少磁盘空间和字符集有关。因为是固定长度已经分配了这么多空间。如果不填充就会造成碎片问题不连续。
为什么用空格填充 char类型存储的是字符而不是字节。分配固定长度之后空余部分肯定要存贮当前字符集中的某个字符逻辑上讲用空格填充应该是最合适的。也不能用“00***00”因为“00***00”在当前字符集中可能不是任何字符即便是某个字符也不如用空格表示更合理。 右侧用空格填充那么原本右侧的空格和填充的空格就分不清了就会有右侧空格丢失的问题。
固定长度有什么好处呢 1、对于经常修改的数据VARCHAR容易出现碎片长变短还可能有重建记录、页分裂的开销短变长。
2、对于非常短的列CHAR也比VARCHAR更高效设计为只保存Y和N的值的CHAR(1)在单字节字符集[插图]中只使用1字节但VARCHAR(1)需要2字节因为还有一个记录长度的额外字节。