2012-08-08 45 views
1

我插入一行,其中JOBCODE字段定義爲varchar(50)。當該字段的字符串大於20個字符時,我從SQL Server獲得一個錯誤,警告該字符串將被截斷。AnsiString被截斷了足夠的空間

我懷疑這可能與Unicode寬字符有關,但我認爲然後25個字符會通過。

有沒有人見過這樣的事情?我錯過了什麼?

回答

1

我認爲這裏還有其他問題。

VARCHAR(50)應該是50個字符,而不管編碼

爲例

CREATE TABLE AnsiString 
(
    JobCode VARCHAR(20), -- ANSI with codepage 
    JobCodeUnicode NVARCHAR(20) -- Unicode 
) 

插入20個Unicode字符轉換爲兩列

INSERT INTO AnsiString(JobCode, JobCodeUnicode) VALUES ('葉2葉4葉6葉8葉0葉2葉4葉6葉8葉0', 
                 N'葉2葉4葉6葉8葉0葉2葉4葉6葉8葉0') 

select * from ansistring 

返回

?2?4?6?8?0?2?4?6?8?0 葉2葉4葉6葉8葉0葉2葉4葉6葉8葉0 

正如所料,?插入用於未映射到ANSI的字符,但無論如何,我們仍然可以插入20個字符。

你可能在桌上有觸發器嗎?它可以完全是另一列嗎?你的數據訪問層能否以某種方式將你的unicode字符串擴展到別的東西(例如byte [])?

+1

的確,它是插入相同字符串的另一個varchar(20)列。感謝您的幫助和有見地的評論。 – 2012-08-08 14:33:33