为什么*在SQL中插入

Sha*_*rad 2 sql-server-2008

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

    Create Table Test_Table
(
    Field_char char(1)
);
Run Code Online (Sandbox Code Playgroud)

当我想用代码插入值

Insert Into Test_Table(Field_char)
Select 13;
Run Code Online (Sandbox Code Playgroud)

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

为什么是这样?

Don*_*oom 8

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

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

更准确地看一下这里.

截断和舍入结果

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

我们有以下条目:

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

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

  • 唯一的答案实际上解释了*来自哪里.添加一个链接到https://msdn.microsoft.com/en-us/library/ms187928.aspx并从中引用:截断和舍入结果对char,varchar,nchar,nvarchar,binary和varbinary的转换被截断,除了对于下表中显示的转换.*=结果长度太短而无法显示 (2认同)