2013-05-16 32 views
1

我们接受来自HTML表单,当使用Hibernate将其保存到字符串变成??xi???保存重音的字符在SQL Server

然后我做了一个SQL更新数据库中的重音字符,如Ḿấxiḿứś,试图写重音字直接进入数据库,发生的结果相同。

所需的行为是将其设置到dabase中。

我使用Microsoft SQL Server 2008

我试图谷歌,有人说我需要将数据库排序规则更改为SQL_Latin1_General_CP1_CI_AI。但我无法从下拉菜单中找到这些选项。

+8

什么是您的**表结构**模样相同的设置?你有什么列,它们是什么**数据类型?为了支持所有重音字符,你最喜欢的是需要支持Unicode的'NVARCHAR'(不只是'VARCHAR') –

+0

@marc_s这是我刚更改为NVARCHAR的VARCHAR,它仍然不起作用,而且我当前的数据库排序规则为Latin1_General_CI_AS –

+0

现实hibernate会自动处理它,你只需要做它就可以将列类型更改为NVARCHAR,并确保数据库整理对区分重音敏感。 –

回答

0

ALTER TABLE TABLE_NAME ALTER COL UMN coloumn_name NVARCHAR(40)null

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

我试图改变表格排序但它没有工作,也许 你必须备份你的数据,用新的排序规则创建一个新的数据库 然后弹出数据。

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

2

这些工作中只有一个工作:unicode常量的nvarchar数据类型和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

+0

我正在使用hibernate不直接查询数据库使用sql –

+0

@山阳区:这是一个例子。但是,你需要修复休眠和模型..就像我说的“你必须确保所有数据类型都是nvarchar端到端” – gbn

+0

我已经完成了这个,现在它们都是Nvarchar,但仍然不工作 –

0

ALTER TABLE “表名”

ALTER COLUMN “COLUMNNAME” 为nvarchar(64)COLLATE SQL_Latin1_General_CP1_CI_AS