SQL WHERE 子句与拉丁文和泰文字符的列不匹配

Posted

技术标签:

【中文标题】SQL WHERE 子句与拉丁文和泰文字符的列不匹配【英文标题】:SQL WHERE clause does not match on columns with Latin and Thai characters 【发布时间】:2014-10-14 01:35:00 【问题描述】:

我正在清理一个 SQL Server 2012 数据库,其中包含一些包含混合字符集数据(拉丁语和泰语脚本)的 nvarchar 列。例如:

由于我有许多列具有相同的 TariffDescription 文本,因此我想使用简单的 UPDATE 命令应用翻译。例如:

UPDATE Tariff.NationalTariff 
SET TariffDescription = 'Liquid.' 
WHERE TariffDescription = 'Thai description: - - ที่มีสภาพเหลว';

但是,当我执行此命令时,SQL Server 不会更新任何行。我通过尝试做一个简单的选择来确认问题出在 WHERE 子句上:

SELECT * 
FROM Tariff.NationalTariff 
WHERE TariffDescription = 'Thai description: - - ที่มีสภาพเหลว';

当我预期它返回大约一百行时,此查询返回零行。

请注意,我通过从结果表中复制和粘贴来填充 WHERE 子句字符串(使用不依赖于 TariffDescription 列的查询)。我无法输入泰语字符。

我不知道为什么会发生这种情况,我最好的猜测是它与混合字符集有关。有什么想法吗?

【问题讨论】:

【参考方案1】:

将 N 放在文字文本之前

   SELECT * FROM Tariff.NationalTariff WHERE TariffDescription = N'Thai description: - - ที่มีสภาพเหลว';

【讨论】:

是的,这解决了问题。谢谢。我在 T-SQL 中将其指定为 NVARCHAR 字符串之前的 N 前缀上快速搜索了一下。 ***.com/questions/10025032/…

以上是关于SQL WHERE 子句与拉丁文和泰文字符的列不匹配的主要内容,如果未能解决你的问题,请参考以下文章

当列不明确时,有啥方法可以强制 Mysql 在 where 子句中使用 select 中的列?

PostgreSQL:在 WHERE 子句中搜索时列不存在

plsql 检查 where 子句中至少一个变量不为空

如何在 SQL 的 WHERE 子句中动态调用列

SQL在where子句中使用子选择中的列

sql where子句中的列顺序