在 sql server 2008 中使用 unicode 文本

Posted

技术标签:

【中文标题】在 sql server 2008 中使用 unicode 文本【英文标题】:using unicode text in sql server 2008 【发布时间】:2012-05-18 19:21:27 【问题描述】:

我想在我的网站中使用 unicode 文本。我在数据库中有 nvarchar(max) 数据类型来存储数据。当我将 unicode 文本保存到数据库中时,它工作正常。但是,当我尝试执行一些 sql 操作时,unicode 文本更改为“?????” 例如,下面的查询

declare @unicodetext nvarchar(250)
set @unicodetext='बन्द'
select @unicodetext

结果

解决办法是什么? 谢谢

【问题讨论】:

数据库的默认排序规则是什么? @Oded 默认排序规则是 SQL_Latin1_General_CP1_CI_AS 【参考方案1】:

您必须将数据库排序规则设置为接受此类字符的排序规则,或者您可以像这样在您的选择中添加排序规则子句(谷歌告诉我这是一个印地语字符)

declare @unicodetext nvarchar(250)
set @unicodetext='बन्द'
select @unicodetext
COLLATE Indic_General_90_CI_AS 

这行不通,但我在 SQL Server 2005 的 BOL 上找到了这个:

4 在 SQL Server 2005 中不推荐使用印地语排序规则,因为 此 SQL Server 版本中使用 Windows 2000 排序表。这 排序规则仍然存在于服务器中,但它不会被支持 未来的 SQL Server 版本,它不会出现在 ::fn_helpcollat​​ions()。

5 在 SQL 中不推荐使用 Hindi 和 Lithuanian_Classic 排序规则 Server 2005。这些排序规则仍然存在于服务器中,但它们将 在未来的 SQL Server 版本中不受支持,并且它们不会显示 在 ::fn_helpcollat​​ions() 中。

2008 年:

印地语(印度)- 在服务器级别不可用

【讨论】:

【参考方案2】:

试试

declare @unicodetext nvarchar(250)
set @unicodetext = N'बन्द'
select @unicodetext

也许您注意到 SQL Server 在为您生成 DDL 脚本时对任何带引号的字符串输入使用 N

【讨论】:

好地方。 Unicode 文本需要使用N 修饰符进行限定。

以上是关于在 sql server 2008 中使用 unicode 文本的主要内容,如果未能解决你的问题,请参考以下文章

Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效

在 sql server 2008 中使用 unicode 文本

安装SQL SERVER 2008,出现“查找sql server 2008安装媒体”的问题

在 SQL Server 2008 的拆分函数中使用连接表列

如何在 sql server 2008 的 exec 语句中使用替换

使用 SQL Server 2008 在 WHERE 子句中使用 SUBSTRING 函数 [重复]