2013-04-23 202 views
9

我有这个表:消息8152,字符串或二进制数据将被截断

CREATE TABLE Vendors 

(
    VendorID   NUMERIC(10)  NOT NULL, 
    VendorName   CHAR(50)  NOT NULL, 
    VendorAddress  VARCHAR(30)  NULL, 
    VendorCityName  VARCHAR(20)  NOT NULL, 
    VendorStateName  CHAR(2)   NOT NULL, 
    VendorZip   VARCHAR(10)  NULL, 
    VendorContactName CHAR(50)  NOT NULL, 
    VendorContactPhone VARCHAR(12)  NOT NULL, 
    VendorContactEmail VARCHAR(20)  NOT NULL, 
    VendorSpecialty  CHAR(20)  NOT NULL 

    CONSTRAINT VendorsPK  PRIMARY KEY (VendorID)  
); 

而这种插入:

INSERT INTO Vendors(VendorID, VendorName, VendorAddress, 
    VendorCityName, VendorStateName, VendorZip, VendorContactName, 
    VendorContactPhone, VendorContactEmail, VendorSpecialty) 
VALUES(151330, 'Hyperion', '77 West 66th Street', 'New York', 
    'NY', 10023, 'John Hinks', '212-337-6564', 
    '[email protected]', 'Popular fiction') 

为什么这个说法得到8152错误?

+0

@zhrist我看你做了什么,有没有... ...有没有...有 – Tjorriemorrie 2016-09-26 00:00:49

回答

21

VendorContactEmail只有20个字节。第一行的电子邮件地址([email protected])长于24字节。许多电子邮件地址将会更长。谁决定在电子邮件地址栏中只允许20个字符?根据标准,这应该是VARCHAR(320) - 对于域,localpart + 1为64个字符,@ 255为字符。

4

强制操作,在截断结果执行反正

SET ANSI_WARNINGS OFF; 
-- Your operation TSQL here. 
SET ANSI_WARNINGS ON; 

(source)

相关问题