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
并在整个代码中使用 nvarchar
s。
您必须确保使用具有兼容代码点的格式将数据一直传递到 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 列。仍然使用排序规则来生成所需的排序和比较语义。
我在 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
并在整个代码中使用 nvarchar
s。
您必须确保使用具有兼容代码点的格式将数据一直传递到 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 列。仍然使用排序规则来生成所需的排序和比较语义。