sql varchar后自动填充空格解决方法

   关于使用sql server 2000(也许sql server 系列的数据库也会有这样的问题,我用的是2000的)varchar数据类型时,varchar列中会出现自动补齐空格的问题的解决方法
    当我们在修改密码成功后,但发现修改后的新密码不能登录了,但数据库中的密码的确被修改了,这时,很多人都会怀疑自己写的代码有错误,于是进行了无止境的寻找代码的错误,
但无论你怎么找,都不会发现问题的,为什么呢?我们可以想想,既然我们已经发现数据库里的密码的确被修改成看起来与我们想要修改的密码一致了,
那就可以肯定地说,不是我们的修改代码有错误了,如果代码有错误,那数据库里的密码是不会被修改的,但问题是为什么我们明明看到数据库里的密码已经修改了,但就是不能用修改后的新密码登录呢?
这时我们就应该把问题给转移到另一个地方了,哪里呢?数据库,对,这时我们应该到数据库里寻找我们的问题,这时我们会发现,我们用的数据类型最可以,于是,我在修改方法的代码里把我从数据库中
获取出的密码与其长度打印在后台中,才发现,我在数据库中密码用varchar类型,给最大的长度50,但我修改的新密码只有3位数,但奇怪的是,在后台输出的长度既然是50,也就是输出了passwd的最大长度
,这就让我郁闷了,通过这个打印的信息,确定自己的代码没有错误后,我便把注意力转到数据库,在查看数据库的建立没有错误,我看到了我的passwd(密码)的类型是varchar,最大长度为50,这时我意识到,
此时数据库已经默认在我新修改的密码后面填充了47个空格,经过在网上查找资料后,把这个问题给解决了。。呵呵,现在把解决的办法与大家共享。
   在使用char、varchar、binary 和 varbinary 数据类型的列时,建议始终将 ANSI_PADDING 设置为 ON。
   下面显示在将值插入含有 char、varchar、binary 和 varbinary 数据类型的列时,SET ANSI_PADDING 设置的效果。

设置 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NULL 或 binary(n) NULL      varchar(n) 或 varbinary(n)
ON 将起始值(含有 char 列的尾随空格和 binary 列的尾随零)填充到列的长度。      当 SET ANSI_PADDING 为 ON 时,遵从与 char(n) 或 binary(n) NOT NULL 相同的规则。                                                                                       不剪裁插入 varchar 列中的字符值的尾随空格。不剪裁插入 varbinary 列中的二进制值的                                                                                      尾随零。不将值填充到列的长度。
OFF 将起始值(含有 char 列的尾随空格和 binary 列的尾随零)填充到列的长度。      当 SET ANSI_PADDING 为 OFF 时,遵从与 varchar 或 varbinary 相同的规则。 剪裁插入 varchar 列中的字符值的尾随空格。剪裁插入 varbinary 列中的二进制值的尾随零。

说明  当进行填充时,char 列由空格填充,binary 列由零填充。当进行剪裁时,char 列的尾随空格被剪裁,binary 列的尾随零被剪裁。
在计算列或索引视图上创建或操作索引时,SET ANSI_PADDING 必须为 ON。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。
SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_PADDING 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性(它们在连接前在应用程序中设置)中进行配置。对来自 DB-Library 应用程序的连接,ANSI_PADDING 默认为 OFF。
nchar、nvarchar 和 ntext 列始终显示 SET ANSI_PADDING ON 行为,与 SET ANSI_PADDING 的当前设置无关。
当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_PADDING。
SET ANSI_PADDING 的设置是在执行或运行时设置,而不是在分析时设置。

示例
下例演示该设置如何影响这些数据类型中的每一个。
SET ANSI_PADDING ON
GO
create table Users1
(
userid varchar(50) not null,
username varchar(50) not null,
passwd nvarchar(50) not null,
email varchar(50) not null,
phone varchar(50) not null,
majors varchar(50) not null,
college varchar(50) not null,
place varchar(50) not null
)

猜你喜欢

转载自275549265.iteye.com/blog/1895818
今日推荐