如何用汉字搜索oracle数据库? vb.net

问题描述 投票:1回答:5

当我尝试在字符串查询的帮助下从oracle数据库中提取行时,我遇到了问题。如果我尝试用普通字符搜索一行,我的查询工作,如果我尝试用中文字符更改我的查询没有找到任何行。

        conn.Open()
        cmd.Connection = conn
        cmd.CommandText = "select DIRNAME from PROJECTINFO where UPPER(NAME) = UPPER('" + projFullName + "')"
        cmd.CommandType = CommandType.Text

        dr = cmd.ExecuteReader()
        If dr.Read() Then
            strProjRawDataSharePath = dr.Item("DIRNAME")
        Else
            dr.Close()
            dr.Dispose()
        End If
        dr.Close()
        dr.Dispose()

如果我使用“默认”(projFullName =“Defaults”)从查询中搜索我的“projFullName”,我的查询工作表示,如果我使用projFullName =“中文版测试”进行更改,我的查询不会返回任何值,但是,我的数据库我有一个名为projFullName =“中文版测试”的项目。

vb.net oracle
5个回答
0
投票

您可能需要考虑使用NLS_UPPER而不是UPPER。

NLS_UPPER知道特定于语言的规则等,而UPPER仅适用于“英语”字符,而(IRC)会将这些字符转换为英文字符。

运行以下查询将并排显示数据,并可能会突出显示该问题。

select UPPER(Input.ChineseText), NLS_UPPER(Input.ChineseText)
from   (select '中文版测试' as ChineseText from dual) Input;

或者,如果需要UPPER,可能值得考虑 - 使用UPPER意味着在查询执行中没有使用索引 - 但这不是这个问题的主题。


0
投票

请使用如下所示的N修饰符来处理unicode字符串:

cmd.CommandText = "select DIRNAME from PROJECTINFO where NAME = N'" + projFullName + "'"

希望这可以帮助!


0
投票

检查NLS_SORT中文,这是您可能需要的

Linguistic Sorting and String Searching

select DIRNAME from PROJECTINFO where NLS_UPPER(NAME, 'NLS_SORT =  
SCHINESE_PINYIN_M') = '中文版测试'

0
投票

我这样做: '“+ projFullName +”' “+'projFullName'+”

"select DIRNAME from PROJECTINFO where UPPER(NAME) = UPPER(+'中文版测试'+)"

测试这个没有定义,直接进入代码,因为VB代码中的引号似乎不正确,它们将结束Oracle SQL查询。


0
投票
select UTL_I18N.RAW_TO_NCHAR(UTL_I18N.STRING_TO_RAW(NAME), 'ZHS16CGB231280') As NAME, UTL_I18N.RAW_TO_NCHAR(UTL_I18N.STRING_TO_RAW(DIRNAME), 'ZHS16CGB231280') As DIR FROM PROJECS"

此查询帮助我将deracle从oracle转换为中文字符

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