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

kar*_*tal 26 sql sql-server collation sql-server-2008

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

Mar*_*ith 54

您需要为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'?? ????? ???????')
Run Code Online (Sandbox Code Playgroud)

返回

SELECT * FROM #test
Run Code Online (Sandbox Code Playgroud)

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

col1                           col2                           col3
------------------------------ ------------------------------ ------------------------------
?? ????? ???????               ?? ????? ???????               ?? ????? ???????
Run Code Online (Sandbox Code Playgroud)

  • @Sam,你可能写过像UPDATE表SET column ='العربية',而不是:UPDATE表SET column = N'العربية'...不同之处在于在字符串开头之前放置的"N"表示它是一个unicode ...也就是说,除了作为unicode的列之外,你必须指定字符串是unicode. (5认同)
  • 你太棒了 !!欣赏它!! 我将把你的答案添加到我的博客中. (4认同)
  • 我使用了 nvarchar 但仍然得到 ?.? 'À.Í' 的输出 (2认同)

Bas*_*ANI 12

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

column Data typenvarchar()

在此输入图像描述

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

在此输入图像描述


小智 6

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

您应该将 N 放在字符串之前以使其成为unicode


A G*_*zal 5

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

USE master;
GO
ALTER DATABASE TestDB
COLLATE Arabic_CI_AI;
GO
Run Code Online (Sandbox Code Playgroud)


小智 5

在每个值之前添加“N”。\n示例:

\n\n
INSERT INTO table1 VALUES(N'aaaaaaaaa',N'\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9\xd7\xa9',N'aaaaaaaaaaa',N'\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4\xd8\xb4')\n
Run Code Online (Sandbox Code Playgroud)\n