sql-server - SQL 查询Where Column = '' 返回表情符号字符 🎃 和 🍰

标签 sql-server tsql unicode collation supplementary

好的,我有一个包含三列的表格:

Id, Key, Value

我想删除 Value 为空的所有行 ('')。因此,我在删除之前编写了要选择的查询:

从 [Imaging.ImageTag] 中选择 *,其中 [Value] = ''

到目前为止一切都相当标准...

现在奇怪的部分来了。此查询返回如下所示的两行,并用逗号分隔列:

CE7C367C-5C4A-4531-9C8C-8F2A26B1B980,   ObjectType, 🎃 
F5B2F8A8-C4A8-4799-8824-E5FFEEDAB887,   Caption,    🍰

为什么这两行在 '' 上匹配?

额外信息

我正在使用 Sql-Server,[Value] 列的类型为 NVARCHAR(300),是的,表名称确实是 [Imaging.ImageTag ]

最佳答案

这取决于排序规则。

匹配空字符串

SELECT 1 where N'' = N'🍰'  COLLATE latin1_general_ci_as

不匹配空字符串

SELECT 1 WHERE N'' = N'🍰'   COLLATE latin1_general_100_ci_as

100 排序规则更加最新(尽管仍然不是最先进的,它们自 2008 年以来就已可用),并且您应该使用更现代的排序规则,除非您有某些特定原因不这样做。 The BOL entry for 100 collations特别呼吁

Weighting has been added to previously non-weighted characters that would have compared equally.

关于sql-server - SQL 查询Where Column = '' 返回表情符号字符 🎃 和 🍰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551528/

相关文章:

sql - T-SQL SELECT TOP 返回重复项

java - 通过 JSONObject 传递 Unicode 字符串时出错

SQL Server : how to get a database name as a parameter in a stored procedure

sql-server - 内部连接返回更多行然后存在于表中

sql - 从我的字符串中提取最后两个单词

java - java (NetBeans) 中表情符号的支持?

unicode - UTF-8:语言使用多少字节来表示可见字符?

c# - 下面的 SQL HashBytes 函数需要 C# 等效项

sql-server - 执行 KillAllProcesses 时删除服务器的所有事件数据库连接失败

sql - mysql迁移工具,源参数字符串 | sql server 的连接字符串