C++ 无法将特殊符号插入Oracle数据库
我尝试向Oracle数据库表VARCHAR2列添加特殊符号(即:æøååÆØØØØØ$&@%?),并在以下方法中注意到不同的结果 数据库字符集: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>强>
从nls_数据库_参数中选择*;
NLS\u NCHAR\u字符集AL16UTF16
NLS_字符集WE8MSWIN1252
使用的SQL:
INSERT INTO Test(C1) VALUES('æ_ø_å_Æ_Ø_Å_____£€$&@%¿');
通过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++有关,我不知道它。