插入时用空格填充SQL Server字符串-原因

本文关键字:Server 字符串 原因 SQL 填充 空格 插入 | 更新日期: 2023-09-27 18:26:23

当我试图将一些数据插入SQL Server时,有这些额外的字符

例如我的textBox1.text == "SAMPLE"
这就是代码

string qry = "insert into FinalImages (FinalImageName, Date) values(@FinalImageName, @Date)";
SqlConnection c = new SqlConnection(c_string);
//Initialize SqlCommand object for insert
SqlCommand SqlCom = new SqlCommand(qry, c);
SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, 40)).Value = textBox1.Text;
SqlCom.Parameters.Add(new SqlParameter("@Date", SqlDbType.Char, 40)).Value = DateTime.Now.ToString("MM/dd/yyyy");

但当我在表中检查时,记录是这个"SAMPLE ",它添加了34空格字符
哪里出了问题?

插入时用空格填充SQL Server字符串-原因

不要使用SqlDbType.Char,使用NVarChar。Char是一个固定大小的字符串,用空格填充(一个可怕的怪物)。

您选择了CHAR(40)作为参数类型。你的意思是VARCHAR(40)

您使用的是char(40)。这样你就永远有一根长度为40的绳子。如果较短,SQL Server将自动用空格填充其余部分
Char通常只用于固定长度的数据,例如CustomerNumbers

在这种情况下,您希望使用varchar(40)来获得可变长度。

您指定的参数长度为40个字符,而不是可变长度:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, ***40***)).Value = textBox1.Text;

因此,它有助于填充您提供的值。

只需使用不带长度参数的重载,并使用VarChar:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.VarChar)).Value = textBox1.Text;

运行

关闭ANSI_PADDING;

转到

更全面的信息是SET ANSI_PADDING

如果您这样做,您将需要更新所有现有记录以使用ltrim()/rtrim()删除填充,因为关闭填充不会影响现有记录RTRIM(Transact-SQL)