每次查询前先执行"set character_set_results=gb2312"

解决方案 »

  1.   

    试了一下,不行,是不是myodbc不支持中文?
      

  2.   

    大家看看我的程序:
    /////////////////////////////////////////
    //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数据库中就发现“中文”变成了??,郁闷那
      

  3.   

    LPCTSTR( sql )
    在最简单的情况下,可以将 CString 对象转换成 LPCTSTR。LPCTSTR 类型转换运算符从 CString 对象返回指向只读的 C 样式空终止字符串的指针。 
    由 LPCTSTR 返回的指针指入由 CString 使用的数据区域。如果 CString 离开了这个范围并且被自动删除,或其他原因更改了 CString 的内容,那么 LPCTSTR 指针将不再有效。请将该指针指向的字符串视为临时的。 
    我觉得有没有可能是转换类型得时候有问题.如果直接用CSTRING类型而不用转换成LPCTSTR类型呢?
      

  4.   


    我试了一下,是不行的db.ExecuteSQL 默认接受的参数就是LPCTSTR类型的,他还会自动将CString 转换为LPCTSTR类型的
    似乎不是这个问题
      

  5.   

    用一个叫做escap(函数名记不住)什么的函数处理每个要放入到表里的数据,这是必须要做的,你没有这样做当然不可以了。