允许在SQL Server 2008中使用特殊字符

6

我正在使用SQL Server 2008 Express版,其排序设置为默认值。我希望在我的数据库中存储特殊字符,如á、â、ã、å、ā、ă、ą、ǻ,但它会将它们转换为普通字符,如'a'。如何阻止SQL Server这样做?


存储这些字符的表列的数据类型是什么?nvarchar? - o.k.w
2个回答

8

请确保您的列使用类型nvarchar(...),而不是varchar(...)。前者是Unicode,后者是ASCII。

另外,请确保您的数据库默认排序规则设置为“区分重音”,并且您的列以此方式存储。您还可以检查实例默认排序规则,因为它会影响系统数据库(特别是tempdb)的默认排序规则。


感谢您的回复,Rob...但似乎并没有帮助...我已将排序规则设置为德语,并检查了区分重音选项...此外,我所涉及的表中的所有列都是nvarchar...仍然进行转换...我做错了什么吗? - Rahul
@Rahul - 你是如何将值放入数据库的?转换是否可能在上层(例如应用程序)发生? - Damovisa
目前我只是在数据库中运行直接查询...所以这与应用程序无关... - Rahul
你能检查一下列的排序规则是什么吗?查询sys.columns并帮我确认一下吗? - Rob Farley
你能展示一下你是如何“直接在数据库中运行查询”的吗?使用Management Studio吗?你能展示准确的INSERT语句,还有像Rob问的那样,表格的sys.columns输出吗? - Aaron Bertrand

4

你好,以下是一个在SQL 2005和2008上完美运行的非常简单的查询:

查询

DECLARE @t1 TABLE (
    Col1    nvarchar(30)
)

INSERT INTO @t1 VALUES (N'á ,â ,ã ,å ,ā ,ă ,ą ,ǻ')

SELECT * FROM @t1

结果

Col1
------------------------------
á ,â ,ã ,å ,ā ,ă ,ą ,ǻ

这里没有什么特别的。没有从默认值更改排序规则,只有一个简单的 NVARCHAR 列。

你说你“只是在数据库中直接运行查询”。你可以尝试运行这个查询,看看是否得到相同的结果?


非常感谢……:)您能解释一下为什么我们需要在特殊字符之前传递“N”吗? - user475700
作为后续,我在2008 R2和Denali CTP3上测试了相同的代码。它的工作方式完全相同。 - Rob Garrison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接