2010-08-24 125 views
15

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

+0

对照为它MySQL数据库或我的SQL数据库? – Kashif 2010-08-24 19:27:12

+0

sql 2008数据库不是我的sql对于这种语法错误感到抱歉 – kartal 2010-08-24 19:31:55

+0

您是否试图在类型为'(var)char'或'n(var)char'的列中存储阿拉伯字符? – 2010-08-24 19:38:58

回答

43

你需要选择你的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'لا أتكلم العربية') 

SELECT * FROM #test 

返回

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

要查看阿拉伯语的归类列表使用

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

非常感谢你这么多 – kartal 2010-08-24 23:15:06

+3

你真棒!非常感谢!我将把你的答案添加到我的博客。 – 2012-11-12 20:22:22

+0

使用Unicode数据类型(nchar/nvarchar)就够了,非常感谢Martin – newComer 2013-10-21 00:19:34

-6

ITI公司是很容易阿拉伯语字符串存储在Oracle中。使用此代码:

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

上面将保存在Oracle中就好了。

+1

你的答案为什么提到Oracle? – Ben 2012-10-20 12:14:28

+2

@Akram,请阅读这个问题。 – Storm 2013-01-28 10:05:25

1

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

USE master; 
GO 
ALTER DATABASE TestDB 
COLLATE Arabic_CI_AI; 
GO 
2

插入到表(列)的值(Ñ“XXX”))

你应该填入N字符串之前,使其的unicode

6

所有你所要做的就是确保

column Data typenvarchar()

enter image description here

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

enter image description here

0

确保所有的表格和varchar列有utf8_general_ci