从 MSSQL NVarchar 列中检索阿拉伯文本

7

我正在制作一个图书馆管理系统,我想为我的项目添加阿拉伯语支持,但我遇到以下困难:

  1. 当通过查询将数据插入SQL中时,例如 Insert into book_info values(25, N'جاوا', N'Author',N'Publisher',2014,N'Subject',50,N'Language','Latest',5),book_info中的列如下:

    • 书籍ID(int)
    • 书籍标题(NVarchar(50))
    • 作者(NVarchar(50))
    • 出版社(NVarchar(50))
    • 出版年份(int)
    • 学科(NVarchar(50))
    • 价格(int)
    • 语言(NVarchar(50))
    • 版本(NVarchar(50))
    • 部分(int)

    因此,当我通过我的项目执行此查询时,SQL Management Studio显示一些编码字符,例如'مجتبیٰ'代替阿拉伯字符,在SQL Management Studio和选择数据时都是如此。注意:这些查询中的值是通过textfield使用.getText()函数获取的。

  2. 如果我们通过在SQL Management Studio中执行查询来跳过第一个问题,那么通过这样做,第一个问题会被临时解决,因为SQL Management Studio在选择数据时显示阿拉伯字符,但是当我们从软件中选择它并通过ResultSet获取数据并在Textfield中显示它时,如"TextF.setText(ResultS.getNString())",文本字段中会显示"??????"而不是阿拉伯字符。


最有可能的罪魁祸首是getText、setText方法。我怀疑它们假定你传递的字符串是ASCII字符串,导致转换错误(这些错误用???字符表示)。 - Panagiotis Kanavos
@PanagiotisKanavos,实际上我正在使用参数化查询而不是硬编码查询,并且我知道Nvarchar不需要特殊处理。我同意最有可能的罪魁祸首是getText和setText方法以及我存储数据的向量。 - MMujtabaRoohani
但是你是如何将数据发送到数据库的呢?在到达表之前,确实会进行ASCII转换,这就是问题的原因。要么getText返回ASCII(我怀疑),要么你的数据库语句是ASCII,或者数据库驱动程序将语句作为ASCII发送。请发布你用于插入数据的代码。你也可以尝试使用SQL Profiler查看实际发送到服务器的内容,调试你的应用程序以查看每个步骤中字符串的值。 - Panagiotis Kanavos
请尽快提供完整的代码,以便我能够颁发奖励。我只剩下2个小时来颁发奖励。 - MMujtabaRoohani
连接到SQL Server时,您无需执行任何不同的操作。由于您尚未发布代码,因此我无法告诉您如何修复已有的代码。 - Panagiotis Kanavos
显示剩余6条评论
2个回答

1
您的数据库定义、查询和SQL实例都很好。您遇到的问题是从数据库中读取字符串到Java时出现了问题。
我认为Java试图将您的nvarchar文本读取为ASCII字符,而实际上它们是Unicode编码。结果是看起来混乱的文本。我认为当您从数据库中读取文本时,需要确保以Unicode方式读取。
如果您可以发布您的代码,我可能可以确定导致您问题的原因。

请问您能否向我展示正确的获取数据方式? - MMujtabaRoohani
这里我有一个ResultSet 'rs',其中包含问题描述中的表格的1行数据,如何在一组文本字段或Jtable中显示该行数据。 - MMujtabaRoohani
我认为你做对了,这行代码起到了作用:System.setProperty("file.encoding","UTF-8"); - MMujtabaRoohani

0

尝试像这样使用COLLATE语句:

CREATE TABLE #book_info
(
Book_ID int,
Book_Title NVarchar(50) COLLATE Arabic_ci_as,
Author NVarchar(50),
Publisher NVarchar(50),
Publish_Year int,
Subject NVarchar(50),
Price int,
Language NVarchar(50),
Edition NVarchar(50),
Part int
)

Insert into #book_info values(25, N'جاوا', N'Author',N'Publisher',2014,N'Subject',50,N'Language','Latest',5) 

SELECT *
FROM #book_info

1
Unicode字段不需要排序规则来处理Unicode数据。 - Panagiotis Kanavos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接