【问题标题】:Issue with datatype nchar in SQL Server databaseSQL Server 数据库中数据类型 nchar 的问题
【发布时间】:2012-11-04 05:17:08
【问题描述】:

我正在使用 SQL Server 2008、Visual Web Developer 2012 和 .net 4.0。我在 SQL Server 中创建了一个表并向其中添加了一些列。我给了一些列数据类型nchar(10)

现在我的问题是,当我插入少于 10 个字符的字符串作为列类型 nchar(10) 的值时,当我获取该值时,它会插入空格以完成 10 个字符的字符串。

表示如果我将"a" 插入nchar(10) 类型的列中, 然后当我再次获取值时,我会返回:"a "

我该如何解决这个问题?

【问题讨论】:

  • 改用 varchar 或 nvarchar
  • 不改变数据类型,难道不能解决这个问题吗?
  • 更改数据类型是解决方案。您根据需要使用了错误的数据类型并尝试更改 数据类型。我认为这是不可能的。即使可以更改,您以后也会遇到问题。所以保持简单
  • NCHAR(10)定义来做到这一点的 - 这是设计使然,它是应该如何工作。要么你没问题,要么你使用了错误的数据类型。您无法更改现有数据类型的行为 - 这就是您所需要的,或者您需要使用不同的数据类型

标签: c# sql-server sqldatatypes


【解决方案1】:

你可以这样做来修剪空格:

SELECT RTRIM(CAST(col As NVARCHAR(10))) FROM test

查看SQLFIDDLE

【讨论】:

    【解决方案2】:

    将字符串定义为nvarchar(10)它会正常工作

    【讨论】:

      【解决方案3】:

      如果您不想更改数据类型,则需要从输出中修剪空间

      SELECT
         RTRIM("a      ") AS ColumnName
      FROM MyTable
      

      但这意味着每次您在使用该列的每个地方都必须这样做。最好使用 VARCHAR(10) 或 NVARCHAR(20) 其中 VAR... 表示可变长度。因此,如果您的字符串不超过 10 个字符,则不会添加空格

      最终的 SQL

      SELECT
         RTRIM(ColumnName) AS ColumnName
      FROM myTable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-19
        • 2015-06-18
        • 1970-01-01
        • 2016-05-22
        • 2011-05-20
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多