日期:2014-05-16  浏览次数:20848 次

VS2005 用mysql_real_query插入中文,不报错,但入不了库。
表的结构如下
CREATE TABLE `t_s_ags_log` (
  `tran_time` datetime NOT NULL COMMENT '交易时间',
  `tran_no` char(5) default NULL COMMENT '交易码',
  `tran_name` varchar(128) default NULL COMMENT '交易名称',
  `tran_src_ip` char(15) default NULL COMMENT '发起方IP',
  `res_code` char(2) NOT NULL COMMENT '响应码',
  `tran_pkg` varchar(1024) default NULL COMMENT '交易报文',
  PRIMARY KEY (`tran_time`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COMMENT='AGS交易日志表 ';

插入之前用了 set names 'gb2312'

//代码如下
strcpy(sSql,"insert into t_s_ags_log values('2007-12-03 11:55:41','91008','测试通讯','192.168.0.168','00','91008')");
if( 0 != mysql_real_query(&mysql,sSql,(unsigned int)strlen(sSql)))
{
 printf("%s\n",mysql_error(&mysql) );
}


我运行之后不报错,返回值为0,说明执行成功了。
可数据库里并没有插入任何值,跟没运行一样。
而如果我把'测试通讯'替换成英文或数字,程序就插入成功了。
我在MySql-Front中直接运行这条语句,就可以直接插入,这是怎么会事??
小弟刚参加工作,经验还很少
各位前辈,请指教。

------解决方案--------------------
set names 'gb2312'

这句你加到哪里了?
------解决方案--------------------
没有搞过VC。不过set names gb2312一定得和你的插入语句在一个SESSION内才可以。

插不进去一般都是因为没有在一个SESSION内。
------解决方案--------------------
set names gbk;
------解决方案--------------------
set names 用在这是没有问题的。
你的源代码文件编码是不是GB2312?即这句代码中的测试通讯编码是不是GB2312的?
strcpy(sSql,"insert into t_s_ags_log values('2007-12-03 11:55:41','91008','测试通讯','192.168.0.168','00','91008')");