正如文档所说,mysql不会分配您为varchar指定的完整空间。它存储实际的数据长度。所以我猜这里可能还有副作用。就像一个varchar记录的原始长度是10,现在我想将它更新为20,但仍然没有达到指定的限制50.但是,之前分配的空间是不够的。 所以我的问题是MySQL如何处理这种情况?移动该记录后的所有内容需要很长时间?还是它必须这样做? 有没有人可以告诉我它是如何在内部工作的?提前致谢!使用varchar(x)有什么危害?
回答
MySQL处理得很好,你不应该关心细节。尽管长度不规则的记录比固定长度的记录管理起来要慢一些,但是如果记录通常小于固定大小,那么通过读取显着更少的数据会带来巨大的性能提升。
请记住,CHAR
列总是以最大大小存储和检索。即使平均记录只有10-15字节的数据,255个字符的字段也需要传输255个字节。这是相当大的开销。
使用CHAR
提出了一系列其他问题,因为该字段将始终为该长度,这意味着它必须完整地传输并且通常在客户端中被剥离。这比麻烦更麻烦。
CHAR
列在现代唯一使用的是用于总是定义的东西,并且将始终是一定的大小。一个例子可能是使用40个字符的十六进制编码哈希值作为标识符,但这些通常很少见,几乎在所有情况下,VARCHAR
也可以工作。
我可以想到几个可以使用'char'的例子 - 电话号码,电话号码,国家保险号码等等。但对于大多数情况'varchar'更好。 – 2012-07-18 20:42:27
即使在国家内,邮政编码的长度也会有很大差异,电话号码可能会有扩展名,等等。如果你曾经敢于假设*某种特定的固定长度,你通常会感到惊讶。我希望你不是用'CHAR(5)'邮政编码字段创建数据库,因为我之前就已经看到过,而且它已经超越了真气。 – tadman 2012-07-19 11:27:08
- 1. 在MySQL中为varchar选择一个大值会有什么危害吗?
- 2. 有很多枚举值会有什么危害吗? (many> = 1000)
- 3. 字节码操作的危害是什么(如果有的话)?
- 4. 编译boost时,定义BOOST_DISABLE_ABI_HEADERS会有什么危害?
- 5. Objective-C中属性覆盖有什么危害?
- 6. 不应分配参数'foo' - 有什么危害?
- 7. 让git分支“变老”有什么危害吗?
- 8. 使用svn有什么危险?
- 9. 没有虚拟方法的虚拟析构函数有什么危害吗?
- 10. 超正常化的危害?
- 11. 管道常见的管道危害是什么?
- 12. 动态SQL的危害是什么,可以避免吗?
- 13. 数组中的大量空值意味着什么危害?
- 14. 当ACL已经到位时,给予网站充分信任有什么危害?
- 15. 我是MySQL的新手,有什么方法可以危害数据库吗?
- 16. Java程序终止时无法关闭文件会有什么危害吗?
- 17. 获得ReCAPTCHA公钥/私钥时使用全局域有效性有什么危害?
- 18. 如果我们使用Android Views的私人访问修饰符会有什么危害吗?
- 19. 不符合声明的HTML文档类型的危害是什么?
- 20. 在对象上未使用的属性有什么伤害?
- 21. 使用NOLOCK读取单个静态行。有什么伤害?
- 22. 为什么使用TransactionScope的默认构造函数有害?
- 23. 使用时的危害有哪些“!=”“不等于”处于停车状态
- 24. 在Python函数中使用kwarg = kwarg会有什么危险吗?
- 25. 使用查询字符串有什么危险?
- 26. 为什么使用find和will_paginate会有危险?
- 27. 在SSL页面中使用SSL iframe有什么危险
- 28. 为什么reinterpret_cast的仍然是在使用时有危险
- 29. 将常规实用函数中的void返回类型更改为其他类型会有什么危害?
- 30. 暴露您的安全Web应用程序的静态资源不安全有什么危害?
相信我,关于磁盘存储优化,关系数据库在过去的40年中走过了很长的路要走。不要为了小东西而流汗。 – Olaf 2012-07-18 19:23:31