SQL 服务器索引 - varchar(100) 与 varbinary(100)? [转换数据]

SQL Server indexing - varchar(100) vs varbinary(100)? [convert data]

varchar(x)varbinary(x) 列上设置索引(主要或次要)更好吗?

我什至不确定它是否重要。然而,我在网上看到的(谷歌搜索 - varchar vs varbinary)是 varchar 几乎死了或被推到路边。那么索引更好吗?会不会是索引的类型?

优秀场景: 索引电子邮件地址([编辑] 加密字节数组 {varbinary} 或等效字符串 {varchar})

谢谢

回答?

varbinary 上的索引似乎是有史以来最糟糕的事情。我没看错吗?

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/35b61bb0-1fa8-4a2f-a9fb-729a1874dcf8/clustered-index-on-a-varbinary-column

在varchar 上创建索引比在varbinary 上创建索引更好。 Varbinary 适用于 blob,但您也可以将字符串存储在 varbinary 中。这样的 blob 是对您的实际数据的补充。你自己的研究也得出了这个结论。

用户可以输入多种格式的电子邮件地址 - abc@xyz.com 或 Abc@Xyz.com 等。store/extract 这样的信息更容易 in/from 可变字符字段。 Joe Enos 绝对正确,二进制比较将区分大小写(比较二进制信息),而 varchar 将不区分大小写,假设您是这样设置数据库和列排序规则的。使用 varbinary,您还必须 careful about padding.

Varchar 还活着并且很健康。当您索引 varchar(100) 时,请尝试使用非聚集索引。我的一般偏好是在大多数情况下使用代理键作为聚集索引。

要使用的正确数据类型由列的内容决定。

while encrypting an email address I have a byte array

这是二进制数据,应存储为 varbinary(除非加密例程输出固定长度的数组,然后使用 binary)。

varbinary 转换为 varchar 在存储方面没有任何好处(反正所有内容都以二进制形式存储)并且可能会导致不正确的结果。

以下都是return"yes"我的默认排序

SELECT 
       CASE
         WHEN cast(0xE6 AS VARCHAR(20))  = cast(0x6165 AS VARCHAR(20))
           THEN 'yes' else 'no'
       END,
       CASE
         WHEN cast(0xcc0000 AS VARCHAR(20))  = cast(0xcc2020 AS VARCHAR(20))
           THEN 'yes' else 'no'
       END,
       CASE
         WHEN cast(0x202020 AS VARCHAR(20)) = cast(0x AS VARCHAR(20))
           THEN 'yes' else 'no'
       END

添加 COLLATE LATIN1_GENERAL_BIN 会改变前两个但不会改变第三个的结果。

我希望查找 varbinary(n) 列比查找 varchar(n) 列更快,因为比较例程更简单,但对于带有二进制文件的 varchar 列来说可能不多整理。