这发生在我刚刚测试的时候。 我创建了一个表格
Create Table Test_Table
(
Field_char char(1)
);
当我想用代码
插入值时Insert Into Test_Table(Field_char)
Select 13;
它插入' *'在专栏中。对于单个数字,它按原样插入。如果长度从1修改为2,则对于3位数字输入也会发生类似情况,例如100等。
为什么会这样?
答案 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)
它只是将Int转换为Char
例如
select CONVERT(char(1),13)
它会给*
Sql隐式地将int转换为char,这是你的列类型..