为什么存储在NVARCHAR列中的值有时会用尾随空格填充?

dan*_*n78 12 c# sql-server-2005

我正在处理的应用程序是将Unicode字符串存储NVARCHAR(50)在SQL Server 2005数据库的列中.

有时,数据库返回一个填充空格的字符串,直到列的最大长度(50).在其他时候,填充不会发生.

我认为此列的类型最初被指定为NCHAR,但是当我们意识到添加了空格时,我们将其更改为NVARCHAR(50).这跟它有什么关系吗?

无论哪种方式,这个"功能"可以关闭吗?

澄清

我刚刚意识到我上面写的内容并没有说明即使是新插入的字符串也会被填充空格.

Chr*_*den 15

NCHAR填补了这个领域,NVARCHAR没有.但是如果数据来自旧字段,那么空格将保持不变.

  • 像其他人建议的那样使用更新语句:更新MyTable设置MyColumn = LTRIM(RTRIM(MyColumn)); (5认同)
  • @dandan78 你的“INSERT”是由一个存储过程执行的吗?该存储过程接受“NCHAR(50)”而不是“NVARCHAR(50)”的值?如果该值在某个时刻被填充,那么它在隐式转换为“NVARCHAR(50)”时将保持填充状态。 (2认同)

gbn*_*gbn 8

由于默认情况下SET ANSI_PADDING ON,由nchar类型引起的"遗留"空间先前仍然存在.

您需要使用RTRIM更新以删除尾随空格.


Jay*_*ymz 7

如果您之前已将它们转换NCHARNVARCHAR,则之前输入的任何数据仍将包含尾随空格.您可以通过以下方式更新它们:

UPDATE tablename
SET column = RTRIM(column)
Run Code Online (Sandbox Code Playgroud)