我们接受重音字符,例如Ḿấxiḿứś
来自 html 表单,当使用 hibernate 将其保存到数据库中时,字符串变为??xi???
然后我做了一个 SQL 更新,尝试将重音词直接写入数据库,同样的结果发生了。
期望的行为是按原样设置到数据库中。
我正在使用 Microsoft SQL Server 2008。
我试过用谷歌搜索,有人说我需要将数据库排序规则更改为SQL_Latin1_General_CP1_CI_AI
. 但我无法从下拉列表中找到此选项。
我们接受重音字符,例如Ḿấxiḿứś
来自 html 表单,当使用 hibernate 将其保存到数据库中时,字符串变为??xi???
然后我做了一个 SQL 更新,尝试将重音词直接写入数据库,同样的结果发生了。
期望的行为是按原样设置到数据库中。
我正在使用 Microsoft SQL Server 2008。
我试过用谷歌搜索,有人说我需要将数据库排序规则更改为SQL_Latin1_General_CP1_CI_AI
. 但我无法从下拉列表中找到此选项。
其中只有一种有效: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 的排序和比较
ALTER TABLE table_name ALTER COLUMN coloumn_name NVARCHAR(40) null
如果您使用的是休眠,这就是您所需要的。
我试图更改表排序规则,但没有成功,也许您必须备份数据,使用新排序规则创建一个新数据库,然后弹出数据。
我的数据库设置排序规则是 AS(区分重音),请确保您的设置相同
ALTER TABLE "tablename"
Alter COLUMN "columnname" nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS