回答
首先,它不需要它在所有数据库中。看看SQL Server,它是可选的。
无论如何,它定义了字段内容的最大大小。它本身并不是一件坏事,它表达了意义(例如 - 电话号码,在这个领域你不需要国际号码)。
确实,在未定义SQL Server中的大小时要小心,因为根据场景的不同,默认情况会有所不同。 http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev 2010-07-01 10:19:00
“当在数据定义或变量声明语句中未指定n时,默认长度为1 。当使用CAST和CONVERT函数时未指定n时,默认长度为30.“从提到的链接 – 2018-01-31 12:45:16
VARCHAR字段可以是任何规模达 发挥到极致。该限制从 类型的数据库不同,在Oracle 9i中 的数据库有4000个字节的限制,一个 MySQL数据库为65,535 字节的限制(整行)和 微软SQL Server 2005的8000个字节 (除非VARCHAR (max),其中 具有最大存储容量 2,147,483,648字节)。
VARCHAR的“长度”不是内容的长度,而是内容的最大长度。
VARCHAR的最大长度不是动态的,它是固定的,因此必须指定。
如果您不想为其定义最大大小,请使用VARCHAR(MAX)。
为什么VARCHAR在默认情况下表示VARCHAR(MAX)? INT具有默认大小,所以为什么VARCHAR不能具有默认大小?当创建SQL标准时,这个设计决定背后的原因是什么? – Fixpoint 2010-07-02 08:08:26
当创建SQL Server标准时,VARCHAR(MAX)不存在。它是varchar(8000)或文本。 – 2010-07-02 08:31:52
VARCHAR(MAX)的处理方式与VARCHAR(8000)(最大的非最大类型)不同。请仅在需要时使用VARCHAR(MAX),否则性能将受损。 https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox 2017-09-18 20:55:05
数据库对其存储的数据了解得越多,在使用请求搜索/添加/更新数据时,可以进行的优化越多。
它可以根据varchar max进行哪些优化长度,例如? – Fixpoint 2010-07-01 11:12:52
答案是你不需要需要,它是可选的。
如果你想确保字符串不超过一定的长度,它就在那里。
您可以将其视为数据的约束条件。它确保您不会存储违反约束条件的数据。它在概念上类似于例如对整数列进行检查约束,确保只输入正值。
有可能的性能impact
:在MySQL,temporary tables
和MEMORY tables
商店VARCHAR
柱为固定长度列,填补了它的最大长度。
如果你设计的VARCHAR
列比你需要的最大尺寸大得多,你会消耗更多的内存。这会影响cache efficiency, sorting speed
等。
因此,您给出了字符串下的最大长度。就像如果你最大长度的字符10,所以不要给他的长度100或更多。
- 1. 为什么需要指定表中的列长度
- 2. 为什么不将每个VARCHAR指定为VARCHAR(65535)?
- 3. 为什么不能我设置的varchar为1000的长度
- 4. 为什么IIS7需要很长时间
- 5. pkcs11-tool:为什么我需要指定要加载的模块?
- 6. 使用CAST时,为什么30是VARCHAR的默认长度?
- 7. 为什么我需要为f.readlines()指定一个变量以获得它的长度?
- 8. 为什么在android中定义paddingLeft时需要指定paddingRight?
- 9. MySQL表中varchar长度的重要性
- 10. 为什么指定字符变化类型的长度
- 11. 为什么指定自动增量ID的长度
- 12. !重要的是需要指定宽度
- 13. 为什么长度未定义?
- 14. 为什么你需要指定一个html表格宽度和列宽
- 15. 为什么在varchar(n)中将n指定为具体数字?
- 16. 为什么需要
- 17. 为什么有人需要一个指向指针的指针?
- 18. 的SQLException默认值,指定长度时沿着VARCHAR
- 19. 为什么我需要指定'来自文件'?
- 20. 为什么我们需要在Spring中指定HttpMessageConverter?
- 21. 为什么你需要指定WCF服务的端点地址?
- 22. 为什么这个函数对象不需要指定?
- 23. 为什么我们需要在Apache Kafka中指定Serializer?
- 24. 我需要为Xamarin Tabbar中的图标指定什么尺寸?
- 25. 为什么端口需要指定两次用冒号分隔?
- 26. 为什么你需要指定Java堆大小?
- 27. 为什么我不需要在C#中指定类型参数?
- 28. 为什么在使用VML时需要指定以下样式?
- 29. 为什么我需要指定裁剪的分辨率?
- 30. 为什么我们需要指定init方法?
可能的重复http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 – 2010-07-01 11:34:17
谢谢,这个真的是重复的。 – Fixpoint 2010-07-02 08:11:15