2

我们接受重音字符,例如Ḿấxiḿứś来自 html 表单,当使用 hibernate 将其保存到数据库中时,字符串变为??xi???

然后我做了一个 SQL 更新,尝试将重音词直接写入数据库,同样的结果发生了。

期望的行为是按原样设置到数据库中。

我正在使用 Microsoft SQL Server 2008。

我试过用谷歌搜索,有人说我需要将数据库排序规则更改为SQL_Latin1_General_CP1_CI_AI. 但我无法从下拉列表中找到此选项。

4

3 回答 3

5

其中只有一种有效:nvarchar 数据类型和 unicode 常量的 N 前缀。

DECLARE 
    @foo1 varchar(10) = 'Ḿấxiḿứś', 
    @foo2 varchar(10) = N'Ḿấxiḿứś', 
    @fooN1 nvarchar(10) = 'Ḿấxiḿứś', 
    @fooN2 nvarchar(10) = N'Ḿấxiḿứś';

SELECT @foo1, @foo2, @fooN1, @fooN2;

您必须确保所有数据类型都是 nvarchar 端到端(列、参数等)

排序不是问题:这是用于 nvarchar 的排序和比较

于 2013-05-16T11:36:20.837 回答
0
ALTER TABLE table_name ALTER COLUMN coloumn_name NVARCHAR(40) null

如果您使用的是休眠,这就是您所需要的。

我试图更改表排序规则,但没有成功,也许您必须备份数据,使用新排序规则创建一个新数据库,然后弹出数据。

我的数据库设置排序规则是 AS(区分重音),请确保您的设置相同

于 2013-05-16T13:00:06.103 回答
0
ALTER TABLE "tablename"

Alter COLUMN "columnname" nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS
于 2013-05-16T11:43:21.640 回答