【问题标题】:Allow special characters SQL Server 2008允许特殊字符 SQL Server 2008
【发布时间】:2010-12-10 09:08:09
【问题描述】:

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

【问题讨论】:

  • 存储这些字符的表列的数据类型是什么? nvarchar?

标签: sql-server sql-server-2008 collation


【解决方案1】:

Rahul,这是一个非常简单的查询,可以在 SQL 2005 和 2008 上完美运行:

查询

DECLARE @t1 TABLE (
    Col1    nvarchar(30)
)

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

SELECT * FROM @t1

结果

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

这里没有什么特别的。默认的排序规则没有变化,只是一个简单的 NVARCHAR 列。

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

【讨论】:

  • 非常感谢.......:) 你能解释一下吗?我们需要在特殊字符之前传递“N”。
  • 作为后续,我在 2008 R2 和 Denali CTP3 上测试了相同的代码。它的工作原理完全相同。
【解决方案2】:

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

另外,请确保您的数据库默认排序规则设置为 Accent Sensitive,并且您的列以这种方式存储。您可能还想检查您的实例默认排序规则,因为这会影响系统数据库的默认排序规则,尤其是 tempdb。

【讨论】:

  • 感谢 Rob 的回复....但这似乎没有帮助...我已将排序规则设置为德语并检查了重音敏感选项...此外,我在相关表是 nvarchar...仍在进行转换....我做错了吗?
  • @Rahul - 您实际上是如何将值放入数据库的?转换是否会发生在链上(如在应用程序中)?
  • 到目前为止,我只是在数据库中运行直接查询......所以它与应用程序无关......
  • 你能检查一下列上的排序规则实际上是什么吗?查询 sys.columns 并帮我看看?
  • 还显示您如何“只是在数据库中运行直接查询”...使用 Management Studio?您能否显示您的确切 INSERT 语句,并按照 Rob 的要求显示该表的 sys.columns 输出?
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多