1
我插入一行,其中JOBCODE
字段定義爲varchar(50)
。當該字段的字符串大於20個字符時,我從SQL Server獲得一個錯誤,警告該字符串將被截斷。AnsiString被截斷了足夠的空間
我懷疑這可能與Unicode寬字符有關,但我認爲然後25個字符會通過。
有沒有人見過這樣的事情?我錯過了什麼?
我插入一行,其中JOBCODE
字段定義爲varchar(50)
。當該字段的字符串大於20個字符時,我從SQL Server獲得一個錯誤,警告該字符串將被截斷。AnsiString被截斷了足夠的空間
我懷疑這可能與Unicode寬字符有關,但我認爲然後25個字符會通過。
有沒有人見過這樣的事情?我錯過了什麼?
我認爲這裏還有其他問題。
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 [])?
的確,它是插入相同字符串的另一個varchar(20)列。感謝您的幫助和有見地的評論。 – 2012-08-08 14:33:33