首先,当文本只是英文时,这个问题不存在,但是当我插入阿拉伯文本时,我遇到了问题。
查看我的代码
CREATE PROCEDURE insertToPinTableCardActivation
(@callerID VARCHAR (200),
@vAccount VARCHAR (200))
AS
BEGIN
DECLARE @textEnglish NVARCHAR(1000) --missing length previously
SET @textEnglish = 'Dear customer, your Card linked to account number '+ @vAccount --missing set keyword
SET @textEnglish = @textEnglish + ' is now activated. Thank you for banking with us.'
SET @textEnglish = 'عزيزي الزبون، تم تفعيل بطاقة الصراف الآلي التابعة لحسابكم رقم ' + @vAccount
INSERT INTO pinData([CallerID], [body], [processed])
VALUES (@callerID, @textEnglish, 0)
END
代码创建一个混合阿拉伯语和英语的字符串,然后将其插入表格。
我的问题是看看它插入表中的内容
即使我已经将字段body
设为nvarchar
我在执行存储过程时从我的SQL服务器插入
如果我去桌子并手动插入阿拉伯数据,阿拉伯字母显示正确
答案 0 :(得分:4)
如果您要插入 Unicode 字符串文字,必须在 N
前缀前加上您的字符串文字 - 试试这个:
SET @textEnglish = N'...(insert your Arabic text here)...'
否则,您的文字会在存储前恢复为非Unicode 格式 - 这就是您丢失阿拉伯文字的原因....
并且:如果您要与VARCHAR
参数连接,我建议使用明确的CAST
到NVARCHAR
(包括长度强大>铸造时!):
SET @textEnglish = N'Dear customer, your Card linked to account number ' + CAST(@vAccount AS NVARCHAR(100))