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

时间:2018-02-19 12:35:01

标签: vb.net oracle

当我尝试在字符串查询的帮助下从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 =“中文版测试”的项目。

4 个答案:

答案 0 :(得分: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意味着在查询执行中不使用任何索引 - 但这不是这个问题的主题。

答案 1 :(得分:0)

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

Linguistic Sorting and String Searching

{{1}}

答案 2 :(得分:0)

I'd do that:
'" + projFullName + "'
" + 'projFullName' + "

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

Test this without defining, directly into code, as Quotation marks in VB code seem to be incorrect in there, they would end Oracle SQL Query.

答案 3 :(得分: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"

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