环境:vc6.0,mysql5.1,mysql ODBC5.1
现象:
mysql5.1在liunx服务器上,汉字显示正常。
取出数据后,页面显示数据库取出的值表示为:??上网找了些相关资料:
建一个 ODBC 数据源,指向你的数据库,并在该数据源配置项 Initial Statement 中填入 SET CHARACTER SET GBK
问题:mysql ODBC5.1的连接中好像没有Initial Statement 项。请各位帮忙指导指导,谢谢!
现象:
mysql5.1在liunx服务器上,汉字显示正常。
取出数据后,页面显示数据库取出的值表示为:??上网找了些相关资料:
建一个 ODBC 数据源,指向你的数据库,并在该数据源配置项 Initial Statement 中填入 SET CHARACTER SET GBK
问题:mysql ODBC5.1的连接中好像没有Initial Statement 项。请各位帮忙指导指导,谢谢!
MySQL 中文显示乱码
| Common | CREATE TABLE `Common` (
`ID` char(2) NOT NULL,
`NM` varchar(30) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk |
+--------+----------------------------------------------------------------------------------------------------------------------------------------+
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| ID | char(2) | gbk_chinese_ci | NO | PRI | NULL | | select,insert,update,references | |
| NM | varchar(30) | gbk_chinese_ci | NO | | NULL | | select,insert,update,references | |
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /opt/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------+
参数设置为以上,但是还是显示乱码,很头痛呀,网上提供的很多方法都尝试了,就是不行,是不是还有什么参数没有设置对呀,
我连my.cnf的设置都填上了default-character-set=gbk ,就是不好用。
我连接odbc的代码也贴上吧:
CDatabase db;
db.Open(NULL, FALSE, FALSE, "ODBC;DSN=mysqlODBC");
请各位大侠帮忙呀!!!!!!!!
1、如果指定了字符集和校对规则,则使用指定的字符集和校对规则。
2、如果指定了字符集没有指定校对规则,则使用指定字符集的默认校对规则。
3、如果没有指定字符集和校对规则,则使用服务器字符集和校对规则作为数据库的字符集和校对规则。mysql数据库中的表的字符集和校对规则设置需要遵循一定的规则:
1、如果指定了字符集和校对规则,则使用指定的字符集和校对规则。
2、如果指定了字符集没有指定校对规则,则使用指定字符集的默认校对规则。
3、如果没有指定字符集和校对规则,则使用服务器字符集和校对规则作为数据库的字符集和校对规则作为表的字符集和校对规则。你的这个问题不能在数据库中直接使用set names gbk因为这个是客户端和服务器之间连接使用的字符集,也不能直接在配置文件中指定字符集,因为在配置文件中直接指定的字符集只对新添加的数据有效,对现有的数据是无效的。要想更改现有的数据乱码情况,必须讲数据库中的数据导出,然后修改导出的文件中的字符集格式为gbk,然后在清空数据库(建议创建一个新的数据库创建库的时候选择字符集为gbk)在改数据库的字符集为gbk,然后在设置set names gbk,最后将修改后的字符集导入数据库就没有问题了
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ggs2008/archive/2010/02/02/5280504.aspx
ACMAIN_CHM的方法我都试验了,如果我没有执行set names 'gbk',show variables like 'char%'的话,就不会出现'gbk'了。或者我没有理解你的意思,请再详细说。ggs2008:我在我的补充中已经贴了show create table Common以后的相关数据,说明我建表的时候已经DEFAULT CHARSET=gbk了,所以我不知道导出表结构修改还有什么意义?也请再详细说说。
CString strNM;
listNM.RemoveAll();//SQL文
CString strSql="";
strSql.Format(_T("SELECT nm FROM Common WHERE id like '%s"), id);
strSql = strSql + "%'";
//连接数据库
CDatabase db;
db.Open(NULL, FALSE, FALSE, "ODBC;DSN=mysqlODBC");if (!db.BeginTrans()) //开始事务
return;
try
{
CString strA=_T("set names 'gbk'");
db.ExecuteSQL(strA);
db.CommitTrans(); //提交事务
}
catch(CDBException* e)
{
e->ReportError();
db.Rollback(); //如果出错,回滚事务
}CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T(strSql));
//取得返回值
while(!rs.IsEOF())
{
rs.GetFieldValue("nm", strNM);
listNM.AddTail(strNM);
rs.MoveNext();
}
//关闭连接资源
rs.Close();
db.Close();
/////////////////////////////////////////////
报错:SET NAMES not allowed by driver