【问题标题】:How to store unicode character in oracle database如何在oracle数据库中存储unicode字符
【发布时间】:2018-03-07 15:34:40
【问题描述】:

我正在尝试将 Unicode 数据(印地语字符)存储在 oracle 数据库中,而不是存储在以这种格式存储的印地语字符中????

我使用的是 Oracle 10g,我已将数据库字符集设置为 AL32UTF8 我的表格脚本

create table UTF
(
 ENGLISH_NAME VARCHAR2(10),
 HINDI_NAME   NVARCHAR2(10)
)

我正在使用 Visual Studio 13

我正在使用谷歌 API 进行翻译

<script>
function OnLoad() {
    var options = {
        sourceLanguage:
        google.elements.transliteration.LanguageCode.ENGLISH,
        destinationLanguage:
        [google.elements.transliteration.LanguageCode.HINDI],
        shortcutKey: 'ctrl+g',
        transliterationEnabled: true
    };

    var control = new google.elements.transliteration.TransliterationControl(options);
    control.makeTransliteratable(["txtHindi"]);
    var keyVal = 32; // Space key
    $("#txtEnglish").on('keydown', function (event) {
        if (event.keyCode === 32) {
            var engText = $("#txtEnglish").val() + " ";
            var engTextArray = engText.split(" ");
            $("#txtHindi").val($("#txtHindi").val() + engTextArray[engTextArray.length - 2]);

            document.getElementById("txtHindi").focus();
            $("#txtHindi").trigger({
                type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal
            });
        }
    });

    $("#txtHindi").bind("keyup", function (event) {
        setTimeout(function () { $("#txtEnglish").val($("#txtEnglish").val() + " "); document.getElementById("txtEnglish").focus() }, 0);
    });
} //end onLoad function

google.setOnLoadCallback(OnLoad);

C# .Net 插入代码

public int insert(person d)
    {
        String Query;
        string ConnStr = new ConnectionClass().ConnStr();
        using (OleDbConnection conn = new OleDbConnection(ConnStr))
        {
            Query = "insert into UTF(ENGLISH_NAME, HINDI_NAME) VALUES('" + d.ENGLISH_NAME + "','" + d.HINDI_NAME + "')";
            OleDbCommand cmd = new OleDbCommand(Query, conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

        }
        return 1;
    }

【问题讨论】:

  • 我们可以看看你的insert 代码吗?
  • 我正在使用 google API 进行英语到印地语的转换
  • 您是否编写了一些代码来将数据导入数据库?
  • 这个我也不熟悉,你能把实际插入行时的部分,你的sql查询展示一下吗?
  • 如果没有,您将需要它:oracle.com/technetwork/developer-tools/developer-suite/… -- 您将需要 Oracle 本地客户端,并且您将不得不设置连接。您熟悉 TSNNames.ora 吗?

标签: c# database visual-studio unicode oracle10g


【解决方案1】:

将您的Query 更改为此(请勿更改,此部分仅用于知识目的):

Query = "insert into UTF(ENGLISH_NAME, HINDI_NAME) VALUES('" + d.ENGLISH_NAME + "',N'" + d.HINDI_NAME + "')";

您需要以字母 N 为前缀的 Unicode 字符串常量。如果没有 N 前缀,则字符串将转换为数据库的默认代码页。此默认代码页可能无法识别某些字符。

但是!

(实际需要做的部分)

使用参数化 SQL 查询How and Why to Use Parameterized Queries

Query = "insert into UTF(ENGLISH_NAME, HINDI_NAME) VALUES( @ENGLISH_NAME, @HINDI_NAME)";
cmd.Parameters.Add(new OleDbParameter("@ENGLISH_NAME",d.ENGLISH_NAME));
cmd.Parameters.Add(new OleDbParameter("@HINDI_NAME",d.HINDI_NAME));

【讨论】:

  • 不支持命名参数
  • "OleDB 无法识别命名参数,但它显然可以识别您正在尝试传达命名参数,因此您可以利用它来发挥您的优势并使您的 SQL 语义和更容易理解。只要它们以相同的顺序传递,它就会接受一个变量作为命名参数。", ref : This post.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2013-10-11
  • 2021-07-06
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多