为什么*在SQL中插入

时间:2015-05-06 11:46:37

标签: sql-server-2008

这发生在我刚刚测试的时候。 我创建了一个表格

    Create Table Test_Table
(
    Field_char char(1)
);

当我想用代码

插入值时
Insert Into Test_Table(Field_char)
Select 13;

它插入' *'在专栏中。对于单个数字,它按原样插入。如果长度从1修改为2,则对于3位数字输入也会发生类似情况,例如100等。

为什么会这样?

3 个答案:

答案 0 :(得分:8)

在create语句中,将Field_char的长度设置为1(char(1))。这意味着您的条目的长度必须小于或等于1.有效条目为1,2等。无效条目为12,13,因为它们长于1个字符 - > *是占位符,表示无效值。

编辑:(感谢弗拉基米尔)

更准确地看一下here

  

截断和舍入结果

     

[...]截断char,varchar,nchar,nvarchar,binary和varbinary的转换,但下表中显示的转换除外。

我们有以下条目:

  

从数据类型 int 到数据类型 char 结果*

其中* =结果长度太短而无法显示

答案 1 :(得分:1)

写作时

Insert Into Test_Table(Field_char)
Select 13;

它将int转换为char。所以你的13被转换为*。如果您愿意,可以通过书面检查

select CONVERT(char(1),13)

如果你想把结果看作13那么你需要把它放在这样的单个倒置逗号中:

Insert Into Test_Table(Field_char)
Select '13';

此外,您还需要增加列的大小,因为char(1)只能容纳一个字符。

<强> SQL FIDDLE DEMO

答案 2 :(得分:0)

enter image description here 它只是将Int转换为Char

例如

select CONVERT(char(1),13)

它会给*

Sql隐式地将int转换为char,这是你的列类型..