关于VARCHAR 类型插入表中自动过滤空格的问题?
MS-2000 表的字段定义成VARCHAR(30),在存储过程声明了一个变量类型是VARCHAR(50),
比如@VAR = '12345 ',在插入表后值中的空格被自动过滤掉,不知道什么原因?
因为这是在做数据移植后出现的问题(移植也由测试库移到产品库,不需要考滤兼容问题),所以表的结构以及字段的类型是不可能改,所以类拟这些方法都是不能使用的.
所以只能修改存储过程脚本或数据库的设置.
[解决办法]
varchar型数据自动去掉后面的空格.
[解决办法]
varchar变长
[解决办法]
SET ANSI_PADDING { ON | OFF }
针对小于定义的列大小的值以及 char、varchar、binary 和 varbinary 数据中有尾随空格的值,此语句可以控制存储此类值的方式
下表显示在将值插入含有 char、varchar、binary 和 varbinary 数据类型的列时,SET ANSI_PADDING 设置的效果。
设置 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NOT 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 列中的二进制值的尾随零。
PRINT 'Testing with ANSI_PADDING ON'
SET ANSI_PADDING ON;
GO
CREATE TABLE t1 (
charcol CHAR(16) NULL,
varcharcol VARCHAR(16) NULL,
varbinarycol VARBINARY(8)
);
GO
INSERT INTO t1 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t1 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + ' <', 'VARCHAR'='>' + varcharcol + ' <',
varbinarycol
FROM t1;
GO
PRINT 'Testing with ANSI_PADDING OFF';
SET ANSI_PADDING OFF;
GO
CREATE TABLE t2 (
charcol CHAR(16) NULL,
varcharcol VARCHAR(16) NULL,
varbinarycol VARBINARY(8)
);
GO
INSERT INTO t2 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t2 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + ' <', 'VARCHAR'='>' + varcharcol + ' <',
varbinarycol
FROM t2;
GO
DROP TABLE t1
DROP TABLE t2