SQL 服务器 table 中列的整理设置不起作用

Collate setting on a column in SQL Server table not working

我在 SQL Server 2008 数据库中有一个 table 托管在共享虚拟主机上。我无法更改数据库的排序规则,因为我没有权限。 当我创建 table 时,我为我想要的列设置了排序规则,但它没有做任何事情,当我查询 table 时我仍然看到 ????。我也试过 nvarchar 但没用。

table:

CREATE TABLE [dbo].[T_Client]
(
    [ClientID] [int] IDENTITY(1,1) NOT NULL,
    [ClientName] [varchar](200) collate Hebrew_CI_AI null ,
    [Address] [varchar](200) collate Hebrew_CI_AI null
)

问题是您的 INSERT/UPDATE 语句。除非您将这些值定义为 nvarchar,否则 databases 排序规则之外的字符将丢失。这意味着您需要将参数声明为 nvarchar。因此,我建议不要更改列的排序规则并将它们更改为 nvarchar 并在整个代码中使用 nvarchars。

您必须确保使用具有兼容代码点的格式将数据一直传递到 SQL 服务器。由于您没有希伯来语作为数据库或实例排序规则,因此不能使用 varchar 变量来存储数据。所以这个

declare @d varchar(100) = 'שלום לך עולם' collate Hebrew_CI_AI 
select @d

产出

???? ?? ????

在这种情况下,您必须将值作为 NVARCHAR

传递给数据库
declare @d nvarchar(100) = N'שלום לך עולם' collate Hebrew_CI_AI 
select @d

可以使用具有希伯来语排序规则的 varchar 列来存储数据,但您应该只使用 nvarchar 列。仍然使用排序规则来生成所需的排序和比较语义。