我在读关于MySQL数据类型的大小。我看到VARCHAR需要额外的1/2字节,MEDIUMTEXT需要额外的3个字节,LONGTEXT需要额外的4个字节。这种MySQL行为的原因是什么?
回答
当MySQL(或任何数据库或计算机语言)存储可变长度的字符串,基本上有存储该值的方法有两种:
- 长度可被编码,接着由字符在字符串中
- 串的末端可以通过一个特殊的字符进行标记(通常
'0'
)
数据库(几乎?)总是使用长度编码。所以,当你存储'ABC'
作为一个可变长度的字符串,在数据库中存储它看起来像:
3 A B C
当存储'A'
:
1 A
这样,MySQL的知道什么时候一个字符串结束,接下来开始。不同类型的不同长度取决于字符串的最大长度。因此,1个字节可以保存0到255之间的值。2个字节可以保存0到65,535之间的值,依此类推。
当你使用正则表达式字符,说char(3)
,然后'ABC'
样子:
A B C
这占据三个字节/任何(取决于字符编码)。该长度可以从表元数据中获知。
随着char(3)
,串'A'
也占据三个插槽:
A
---^space here
--------^space here
额外的两个是通过空间占用。对于长字符串,这通常是空间的大量浪费,这就是为什么大多数字符串存储为varchar
而不是char
。
谢谢你的回答,但为什么VARCHAR需要一些时间1个字节,有时2个字节,为什么CHAR不需要额外的字节? –
@VarunAgw。 。 。阅读最后一段,了解为什么'varchar'有时使用一个字节,有时使用2个字符。'char'不需要额外的字节,因为长度是已知的:字符串中的字符数存储在数据库中,长度为从表格的格式可知。 –
- 1. TCP数据包:这些额外字节的含义是什么?
- 2. 为什么随机绑定的类型需要额外的StdGen?
- 3. 为什么我的CSS需要一些额外无用的代码来运行
- 4. 为什么有些房产要求“强”,有些则不需要?
- 5. 为什么一些原语有字节码,有些则不?
- 6. 正则表达式 - 需要一些字符,并只允许一些额外的?
- 7. 为什么需要额外的对象?
- 8. 为什么vim中的某些命令需要冒号而有些不需要?
- 9. 为什么某些MySQL字段现在需要默认值?
- 10. 为什么某些DLL文件需要额外的.lib文件进行链接?
- 11. 为什么只有一些Tkinter回调函数需要参数,而另一些则不需要
- 12. 设置MySQL架构时,为什么要使用某些类型?
- 13. 我需要一些有关dBase字段类型的信息
- 14. 需要一个JavaScript颜色轮与一些额外的功能
- 15. 为什么有一些外部JavaScript文件?数字?
- 16. 什么是Haskell中的一些抽象数据类型,它们与代数数据类型有什么不同?
- 17. 为什么某些组件需要“需要UIExplorerBlock”和“需要UIExplorerPage”?
- 18. 需要模态代码来执行一些额外的代码
- 19. 需要有一些方法在我的类来访问数据
- 20. 为什么在库中需要一些罐子,有些不在战争中?
- 21. Ruby on Rails - 为什么某些数据需要加密?
- 22. MySql,试图找出我的一些查询运行速度有时很慢,需要一些证明为什么
- 23. 这些字节是什么?
- 24. xmlXPathEval需要什么来成功选择一些节点?
- 25. 红宝石:为什么我需要一个额外的“A + B”
- 26. 为什么它需要一对额外的支架?
- 27. 为什么一些OpenGL参数需要0.0-1.0?
- 28. 为什么在scala中传递一些函数需要_
- 29. 为什么实现具有类型约束的泛型接口的泛型类需要重复这些约束?
- 30. 为什么有我的列表项之间的一些额外的空间
这个问题似乎是脱离主题,因为这是其他地方 – Strawberry