Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将特殊符号插入Oracle数据库_C++_Database_Oracle_Soci - Fatal编程技术网

C++ 无法将特殊符号插入Oracle数据库

C++ 无法将特殊符号插入Oracle数据库,c++,database,oracle,soci,C++,Database,Oracle,Soci,我尝试向Oracle数据库表VARCHAR2列添加特殊符号(即:æøååÆØØØØØ$&@%?),并在以下方法中注意到不同的结果 数据库字符集:从nls_数据库_参数中选择*; NLS\u NCHAR\u字符集AL16UTF16 NLS_字符集WE8MSWIN1252 使用的SQL: INSERT INTO Test(C1) VALUES('æ_ø_å_Æ_Ø_Å_____£€$&@%¿'); 通过SQL Developer直接插入 结果: 通过SQLPlus插入 结果: LI>强>

我尝试向Oracle数据库表VARCHAR2列添加特殊符号(即:æøååÆØØØØØ$&@%?),并在以下方法中注意到不同的结果

数据库字符集:
从nls_数据库_参数中选择*;
NLS\u NCHAR\u字符集AL16UTF16
NLS_字符集WE8MSWIN1252

使用的SQL:

INSERT INTO Test(C1) VALUES('æ_ø_å_Æ_Ø_Å_____£€$&@%¿');
  • 通过SQL Developer直接插入
  • 结果:

  • 通过SQLPlus插入
  • 结果:

    <> LI>强>使用SOCI库< /强> 通过C++代码插入 结果: 使用数据库连接字符串(WINDOWS_1252字符集)时:
    “oracle://service= 用户=密码=字符集=178 ncharset=1000”结果为
    
    ÃøÃÆÃÃÃÃ…ÃÃÃ$&%的

    使用数据库连接字符串(UTF_8字符集)时:
    “oracle://service= 用户=密码=字符集=871ncharset=1000”结果为
    
    æèèèèèèèèèè$&%
    C++代码使用:

    std::string dbConnectionString = "oracle://service=<service> user=<user> password=<password> charset=178 ncharset=1000";
    soci::session dbCon;
    dbCon.open(dbConnectionString.c_str());
    soci::statement *cursor = nullptr;
    std::string selectString ="INSERT INTO Test(C1) VALUES('æ_ø_å_Æ_Ø_Å_____£€$&@%¿')";
    
    try
    {
        cursor = new soci::statement(dbCon);
        cursor ->alloc();
        cursor ->prepare(selectString);
        cursor ->define_and_bind();
        cursor ->execute(true);
    }
    catch (soci::soci_error const & e)
    {
        std::cout <<"ERROR :  ." << e.get_error_category() << " : "<<e.what()<<  std::endl;
    }
    
    std::string dbConnectionString=”oracle://service= 用户=密码=字符集=178 ncharset=1000”;
    会话dbCon;
    dbCon.open(dbConnectionString.c_str());
    soci::statement*cursor=nullptr;
    std::string selectString=“插入测试(C1)值(‘æòòòòòòòòòòòòòòòòòòò€$&@%”;
    尝试
    {
    游标=新的soci::语句(dbCon);
    游标->alloc();
    光标->准备(选择字符串);
    游标->定义_和_绑定();
    游标->执行(真);
    }
    捕获(soci::soci_错误常量&e)
    {
    
    Std::原因是不同的客户端。SQL * PLUS是CLI,不支持特殊符号“谢谢”Tejase.第三个案例是什么?第三个案例与C++有关,我不知道它。