不久前,我问了一个有关SQL Server中的层次结构/版本号排序的问题。( 如何使用SQL
Server查询一般地对“版本号”列进行排序
)。
在提交的答案中,有一个与TSQL编码挑战的链接与此相似。
在SQL2000解决方案中,作者演示了两种变体,一种使用并返回varchar,另一种使用varbinary。作者解释说他正在这样做,而没有解释为什么。
因此,我的问题是,方法上的主要区别/优势(如果有)是什么?即为什么使用varbinary而不是varchar?
我已经省略了发布代码的过程,因为上面的文章对代码进行了最优雅的总结。
我相信期望是,与原始字符串的每个部分相比,varbinary数据通常消耗的字节数(5个)要少于varchar个字节(我认为是10或11个),因此,对于大量组件或与之进行比较发生时,它应该更有效。
但我建议,如果您希望使用这两种解决方案,请同时实施这两种解决方案(它们都非常简短),并尝试对实际数据(和查询html" target="_blank">模式)进行剖析,以查看是否存在实际差异(我不会如此)。
(Crafty Steal):正如马丁指出的那样,二进制比较将更加有效,因为它不会涉及处理排序规则的所有代码。:-)
问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能的重复: 对所有基于文本的字段使用通用varchar(255)有不利之处吗? 在MYSQL中,您可以为VARCHAR字段类型选择一个长度。可能的值为1-255。 但是,如果使用最大值而不是VARCHAR(20)的VARCHAR(255),它的优点是什么?据我所知,条目的大小仅取决于插入字符串的实际长度。 大小(字节)=长度+1 因此,如
问题内容: 我建议实施这样的超时: 有人可以告诉我使用此方法而不使用setTimeout的原因/优势是什么? 问题答案: 用基本的话指的是angularjs when-指JavaScript。 如果您仍然认为要使用,则需要在之后调用 示例1:$ timeout 示例2:setTimeout(相同的逻辑) 演示版 $超时也返回一个承诺 JS HTML $超时也会触发摘要周期 考虑我们有一些3d派对代
问题内容: 有没有办法在MS SQL Server 2005上没有master.dbo.fn_varbintohexstr函数的情况下将varbinary转换为ASCII varchar字符串(base64,md5,sha1-没关系)?因为它不能在计算列内部使用。 CONVERT和CAST返回非ASCII字符串。 谢谢, 问题答案: 对于md5和sha1,您可以使用hashbytes。要获取bas
问题内容: 我已经在MSDN论坛上对此进行了阅读,但我仍然不清楚。我认为这是正确的:Varchar(max)将存储为文本数据类型,因此存在缺点。因此,可以说您的字段可靠地在8000个字符以内。就像我的数据库表中的BusinessName字段一样。实际上,一个公司名称可能总是少于500个字符(将数字拉出帽子)。在8k字符数以下,我遇到的许多varchar字段似乎都很好。 那么我应该将该字段设置为va
问题内容: 对于Java的处理方式以及涉及到的数字和其他类型的数字,我有些困惑。例如: 输出(也许您应该先猜测一下): 这不能编译是可以预料的,是不同的对象。 令我有些惊讶的是,默认情况下9是an ,并且1)甚至没有编译。请注意,您不能将放入期望使用的方法中,但是在这里它们是相等的。 由于两个相同的原因,这令人惊讶,但似乎更糟。 不足为奇,因为自动装箱到和。 不足为奇,因为不同类中的对象不应该是。
问题内容: 似乎要合并两个或多个表,我们可以使用join或where。一个相对于另一个的优点是什么? 问题答案: 任何涉及多个表的查询都需要某种形式的关联,以将结果从表“ A”链接到表“ B”。传统的(ANSI-89)方法是: 在FROM子句中列出逗号分隔列表中涉及的表 在WHERE子句中编写表之间的关联 FROM TABLE_A a, TABLE_B b WHERE a.id = b.id 这是