MS-2000 表的字段定义成VARCHAR(30),在存储过程声明了一个变量类型是VARCHAR(50),
[email protected] = '12345 ',在插入表后值中的空格被自动过滤掉,不知道什么原因?
因为这是在做数据移植后出现的问题(移植也由测试库移到产品库,不需要考滤兼容问题),所以表的结构以及字段的类型是不可能改,所以类拟这些方法都是不能使用的.
所以只能修改存储过程脚本或数据库的设置.
------解决方案--------------------
varchar型数据自动去掉后面的空格.
------解决方案--------------------
varchar变长
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
好像找到原因了
varchar 数据类型是一种长度可变的数据类型。比列的长度小的值,不会在值的右边填补来达到列的长度。在创建列时,如果 ANSI_PADDING 选项设置为 OFF,则所有存储在列中的字符值末尾的空格都将截断。在创建列时,如果 ANSI_PADDING 设置为 ON,则末尾空格将不截断。
------解决方案--------------------
- SQL code
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
------解决方案--------------------