尽管数据看似合适,但在插入时"字符串或二进制数据将被截断"

lin*_*abe 4 sql sql-server sql-server-2014

我有一张这样的桌子:

CREATE TABLE Customers
(CustomerID int Identity (1,1) NOT NULL PRIMARY KEY,
customerName varchar (50),
Address varchar (255),
Phone int NOT NULL,
Email varchar,
Gender varchar,
Age int, 
);
Run Code Online (Sandbox Code Playgroud)

我尝试像这样插入这个表:

Insert into Customers (customerName, Address, Phones, Email, Gender, Age)
Values ('Anosa Seunge', 'Keskuskatu 200', 358-3-4180, 'ijiosd@ao.com', 'Male', 19),
        ('Jihad Christian', '305 - 14th Ave. Suite 3B', 358-1-3688, 'jihado@ao.com', 'Female', 29);
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

Msg 8152, Level 16, State 14, Line 4
String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

Mik*_*e L 5

EmailGender字段的长度为1,这可能是你想要的Gender(虽然可能不是基于你的插入语句),但肯定不是Email.

你想要的东西:

CREATE TABLE Customers
(CustomerID int Identity (1,1) NOT NULL PRIMARY KEY,
customerName varchar (50),
Address varchar (255),
Phone int NOT NULL,
Email varchar(50),
Gender varchar(50),
Age int, 
);
Run Code Online (Sandbox Code Playgroud)

  • @ivan_pozdeev 遗憾的是没有,在某些 DBMS 中它们有一个更高的默认值,但在 SQL Server 中它默认为 1 (2认同)
  • 更荒谬的是默认长度的变化取决于使用情况.对于列和变量,它是1,但参数是30.谈论混乱....简单的解决方案是明确的. (2认同)