还是老问题,编码问题
非常奇怪的是可以addnew存储,但是修改就会失败,
我现在脑袋都大了
一下午就倒腾这玩意了~
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
pConn->ConnectionString="DRIVER={MySQL ODBC 5.1 Driver}; \
Data Source = trm_base; ";
try
{
HRESULT hr = pConn->Open("","","",adConnectUnspecified);
pConn->Execute("set character_set_connection='utf8'",NULL,adCmdText);
pConn->Execute("set character_set_results='utf8'",NULL,adCmdText);
pConn->Execute("set character_set_client='utf8'",NULL,adCmdText); CString strSource = "select * from updatetest \
where 姓名='张' and 年龄='十岁'";
HRESULT hr2 = pRst->Open(_variant_t(strSource),
_variant_t(pConn, true),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch (_com_error& err)
{
CString s;
s.Format("%s",err.Description());
}
pRst->MoveFirst();
while (!pRst->ADOEOF)
{
_variant_t varIndex("姓名");
_variant_t varValue("胡");
//pRes->AddNew(); //这里如果addnew,则可以重新填充一条记录,没一点问题
pRst->PutCollect(varIndex, varValue);//假如这里修改,
HRESULT hr = pRst->Update();//这里会显示返回值成功,但是实际上数据库里并没有修改,
pRst->MoveNext();
}
非常奇怪的是可以addnew存储,但是修改就会失败,
我现在脑袋都大了
一下午就倒腾这玩意了~
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
pConn->ConnectionString="DRIVER={MySQL ODBC 5.1 Driver}; \
Data Source = trm_base; ";
try
{
HRESULT hr = pConn->Open("","","",adConnectUnspecified);
pConn->Execute("set character_set_connection='utf8'",NULL,adCmdText);
pConn->Execute("set character_set_results='utf8'",NULL,adCmdText);
pConn->Execute("set character_set_client='utf8'",NULL,adCmdText); CString strSource = "select * from updatetest \
where 姓名='张' and 年龄='十岁'";
HRESULT hr2 = pRst->Open(_variant_t(strSource),
_variant_t(pConn, true),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch (_com_error& err)
{
CString s;
s.Format("%s",err.Description());
}
pRst->MoveFirst();
while (!pRst->ADOEOF)
{
_variant_t varIndex("姓名");
_variant_t varValue("胡");
//pRes->AddNew(); //这里如果addnew,则可以重新填充一条记录,没一点问题
pRst->PutCollect(varIndex, varValue);//假如这里修改,
HRESULT hr = pRst->Update();//这里会显示返回值成功,但是实际上数据库里并没有修改,
pRst->MoveNext();
}
where 姓名='张' and 年龄='十岁'";
根本没有符合条件记录检查你的字符集。按下贴中检查方法贴出你的检查结果。
MySQL 中文显示乱码
where 姓名='张' and 年龄='十岁'";
这个是有记录的variant_t var = pRst->GutCollect(varIndex);//假如这里修改,
这样是可以得到var的值得的,没错的。。我可就纳闷了~
where 姓名='张' and 年龄='十岁'";
这个是有记录的variant_t var = pRst->GetCollect(varIndex);//假如这里修改,
这样是可以得到var的值得的,没错的。。我可就纳闷了~
show master status;看不到一些有用的信息。直接打开日志文件,看到了下边一句话
SET `濮撳悕`='閼? WHERE `濮撳悕`=_latin1'寮? where之后是 _latin1....,我就纳闷了,实际上我是已经查找到这条记录了
我的mysql用的都是utf8编码,为什么where会_latin1 ?难不成他内部转来转去的?
set `濮撳悕`='閼? 为什么这句就没_latin1 ?
难道问题出这里了?
pConn->Execute("set character_set_results='utf8'",NULL,adCmdText);
pConn->Execute("set character_set_client='utf8'",NULL,adCmdText);
我在网上看的
其实set names utf8影响的几个地方
我安装mysql 的时候选择的是utf8
所以my.ini文件里的database,server等都已经是uft8了
只有上边的3个,需要设置,所以我添加了这三句话
效果跟set names utf8是一样的
而且我pConn->Execut("set names 'utf8'",NULL,adCmdText);
代码里根本不认这句话,说是错误命令
UPDATE updatetest SET `濮撳悕`='姊?,`骞撮緞`='浜屽崄' WHERE `濮撳悕`=_latin1'寮? AND `骞撮緞`=_latin1'鍗佸瞾'
2、addnew()后,然后update日志显示
INSERT INTO `trm_base`.`updatetest`(`濮撳悕`,`骞撮緞`) VALUES ('姊?,'浜屽崄')
3、直接利用sql语句update,日志显示
update updatetest set 濮撳悕='姊?,骞撮緞='浜屽崄' where 濮撳悕='寮? and 骞撮緞='鍗佸瞾'勈銵发现:1中,日志有_latin1的转换,我日他的,
这是ado操作mysql的一个bug..