mfc通过odbc连接mysql数据库如何读出mysql数据库中的中文? 每次查询前先执行"set character_set_results=gb2312" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试了一下,不行,是不是myodbc不支持中文? 大家看看我的程序:///////////////////////////////////////////Head.h#ifndef MYDB#define MYDBextern CDatabase db;extern bool openDB( void );#endif//////////////////////////////////////////Head.cpp#include "StdAfx.h"#include "Head.h"CDatabase db;bool openDB(){ if ( db.IsOpen() ) { return true; } else { db.Open( "test", false, false,_T("ODBC;DSN=test;PWD=abcd;PWD=1234"), false ); } return true;}/////////////////////////////////////////////////////////然后在函数中这样使用:openDB();sql="insert into table1(name) values('中文')";try{ db.ExecuteSQL( LPCTSTR( sql ) );}catch ( CDBException e ){ MessageBox("wrong!");}就这样,然后在mysql数据库中就发现“中文”变成了??,郁闷那 LPCTSTR( sql )在最简单的情况下,可以将 CString 对象转换成 LPCTSTR。LPCTSTR 类型转换运算符从 CString 对象返回指向只读的 C 样式空终止字符串的指针。 由 LPCTSTR 返回的指针指入由 CString 使用的数据区域。如果 CString 离开了这个范围并且被自动删除,或其他原因更改了 CString 的内容,那么 LPCTSTR 指针将不再有效。请将该指针指向的字符串视为临时的。 我觉得有没有可能是转换类型得时候有问题.如果直接用CSTRING类型而不用转换成LPCTSTR类型呢? 我试了一下,是不行的db.ExecuteSQL 默认接受的参数就是LPCTSTR类型的,他还会自动将CString 转换为LPCTSTR类型的似乎不是这个问题 用一个叫做escap(函数名记不住)什么的函数处理每个要放入到表里的数据,这是必须要做的,你没有这样做当然不可以了。 存储过程 菜鸟求助贴,也许你不经意的点开就能帮我一个大忙... left join中的问题 拜求!在线等待 级联删除与级联更新怎么同时编写? dbforge studio f or Mysql 6.0.189 求注册码 在线求教关于where条件中关于字符串匹配的疑惑 从Access转到MySql以后遇到的关于null问题 怎样把数据导入MYSQL中呢? MySQL-Front里的复制数据库和数据表的功能为何无法使用 【视频】20部经典Mysql视频下载地址分享 有谁用slony做过postgresql的双机热备? 用jsp写入mysql数据库时中文变成???????????????
/////////////////////////////////////////
//Head.h
#ifndef MYDB
#define MYDB
extern CDatabase db;
extern bool openDB( void );
#endif//////////////////////////////////////////
Head.cpp
#include "StdAfx.h"
#include "Head.h"CDatabase db;
bool openDB()
{
if ( db.IsOpen() )
{
return true;
}
else
{
db.Open( "test", false, false,_T("ODBC;DSN=test;PWD=abcd;PWD=1234"), false );
}
return true;
}/////////////////////////////////////////////////////////
然后在函数中这样使用:
openDB();
sql="insert into table1(name) values('中文')";
try
{
db.ExecuteSQL( LPCTSTR( sql ) );
}
catch ( CDBException e )
{
MessageBox("wrong!");
}就这样,然后在mysql数据库中就发现“中文”变成了??,郁闷那
在最简单的情况下,可以将 CString 对象转换成 LPCTSTR。LPCTSTR 类型转换运算符从 CString 对象返回指向只读的 C 样式空终止字符串的指针。
由 LPCTSTR 返回的指针指入由 CString 使用的数据区域。如果 CString 离开了这个范围并且被自动删除,或其他原因更改了 CString 的内容,那么 LPCTSTR 指针将不再有效。请将该指针指向的字符串视为临时的。
我觉得有没有可能是转换类型得时候有问题.如果直接用CSTRING类型而不用转换成LPCTSTR类型呢?
我试了一下,是不行的db.ExecuteSQL 默认接受的参数就是LPCTSTR类型的,他还会自动将CString 转换为LPCTSTR类型的
似乎不是这个问题