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

时间:2010-08-24 19:18:50

标签: sql sql-server sql-server-2008 collation

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

9 个答案:

答案 0 :(得分: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'لا أتكلم العربية')
  

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

SELECT * FROM #test

返回

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

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

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

答案 1 :(得分:12)

你所要做的就是确保

column Data typenvarchar()

enter image description here

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

enter image description here

答案 2 :(得分:5)

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

USE master;
GO
ALTER DATABASE TestDB
COLLATE Arabic_CI_AI;
GO

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

在每个值之前添加'N'。 例如:

INSERT INTO table1 VALUES(N'aaaaaaaaa',N'ששששששששששששש',N'aaaaaaaaaaa',N'ششششششششششش')

答案 5 :(得分:1)

This是有帮助的,但这是在任何情况下都对我有用的方法

ALTER DATABASE [数据库]设置SINGLE_USER并立即回滚;

GO

ALTER DATABASE [数据库] COLLATE ARABIC_CI_AS;

GO

ALTER DATABASE [数据库] SET MULTI_USER;

GO

更新:最终我必须在项目中将数据类型varchar更改为nvarchar

答案 6 :(得分:0)

确保所有表格和varchar列都具有utf8_general_ci

的排序规则

答案 7 :(得分:0)

列数据类型为nvarchar()

插入到CompanyMaster值中(N'“ + txtCompNameAR.Text +”',N'“ + txtCompAddressAR.Text +”','“ + txtPh.Text +”')

答案 8 :(得分:-6)

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

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

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