在SQL数据库中存储阿拉伯语

问题描述 投票:22回答:7

我试图在SQL 2008数据库中存储阿拉伯字符串,但它转换为“问号”为什么?我该怎么办?

sql sql-server sql-server-2008 collation
7个回答
51
投票

您需要为varchar / char列选择阿拉伯语排序规则或使用Unicode(nchar / nvarchar)

CREATE TABLE #test
(
col1 VARCHAR(100) COLLATE Latin1_General_100_CI_AI,
col2 VARCHAR(100) COLLATE Arabic_CI_AI_KS_WS,
col3 NVARCHAR(100)
)
INSERT INTO #test VALUES(N'لا أتكلم العربية',N'لا أتكلم العربية',N'لا أتكلم العربية')

注意上面的insert语句中的N值。如果您没有提及它,系统会将值视为Varchar,而不是NVarchar。

SELECT * FROM #test

返回

col1                           col2                           col3
------------------------------ ------------------------------ ------------------------------
?? ????? ???????               لا أتكلم العربية               لا أتكلم العربية

要查看阿拉伯语排序规则列表,请使用

SELECT name, description 
FROM fn_helpcollations() 
WHERE name LIKE 'Arabic%'

12
投票

你所要做的就是确保这一点

column Data typenvarchar()

enter image description here

之后我插入阿拉伯语没有任何问题

enter image description here


5
投票

您可以更改数据库级别的排序规则,而不是更改数据库中的每个列:

USE master;
GO
ALTER DATABASE TestDB
COLLATE Arabic_CI_AI;
GO

3
投票

插入表(列)值(N'xxx')。)

您应该在字符串前面加上N以使其成为unicode


0
投票

确保所有表格和varchar列都有utf8_general_ci的排序规则


0
投票

列数据类型是nvarchar()

INSERT INTO CompanyMaster值(N'“+ txtCompNameAR.Text +”',N'“+ txtCompAddressAR.Text +”','“+ txtPh.Text +”')


-6
投票

Iti很容易在Oracle中存储阿拉伯字符串。使用此代码:

declare @P_CUSTOMER_NAME  nchar(50) 
set @P_CUSTOMER_NAME2=N'أختبار'

以上将在Oracle中保存得很好。

© www.soinside.com 2019 - 2024. All rights reserved.