mysql数据库安装时选的utf8编码,在VS2005下用C*api向表中插入中文字符,数据库显示的是乱码(插入的数据应该是gb2312码因为vs2005的代码页配置的是gb2312),有几个转换函数也用了,如:MultiByteToWideChar主要是搞不清楚在什么代码页下,如何将当前编码转换为需要的编码,有没有做过类似功能的朋友推荐个方案,是否与代码页有关系,还是直接用编码转换函数,是否现将gb2312转为uniqueCode编码,再将uniqueCode转为utf-8编码,是否要在连接mysql数据库时,在程序代码处设置mysql的编码,编码不一致到底和那些有关系??????????????????????
解决方案 »
- 怎么对mysql一个表两列相减,然后对减的结果整个求和
- 如何将dos命令封装成可执行文件
- 数据备份
- delete varchar类型纪录出错
- mysql连接到navicat error1045
- 一个关于mysql不同编码数据插入的问题
- 在postgres数据库中,如果在一张表里,随机取出5条记录?
- mysql 获得表名
- mysql索引:where 语句,会自动先筛选有索引项的条件吗?
- 两个表有一个相同字段,查询其中一个表中的字段里面的值不在另外一个表中的sql语句
- 怎么来获取这条记录?
- 为了安装配置mysql cluster,在官网找了一堆的包,试了好多了,都不行。这么多类似的包,实在搞不懂哪些是必须的。。。
MySQL 中文显示乱码
你需要在你获取连接之后,立即执行sql语句:set names 'gbk'
这样,在这之后的sql: CRUD操作,都会得到正确的中文显示、输入与输出。
数据库中设置的是utf8码,但是程序变量的是unicode码
所以当插入一个unicode码到数据库中,肯定是乱码,在数据库
连接时设置utf8码的话,可以将任何变量(不管是什么编码)
转换为utf8码之后,再insert到表中??
取结果时,还需要将得到的utf8编码值转换为unicode进行显示。
就这样子。
CString sql;
if(mysql=mysql_init((MYSQL*)0)){}else{return 0;}
if(mysql_real_connect(mysql, "127.0.0.1", "root", "123456",
"evaluateweb_int_flyoadb", 3306, NULL, 0))
{}else{AfxMessageBox("连接失败");}
if(mysql_set_character_set(mysql,"utf8")){AfxMessageBox("utf8设置不成功!");return 0;}
int num;
MYSQL_RES * res ;
MYSQL_FIELD * fd ;
MYSQL_ROW row ; CString usqlA ="insert into t_evaluateinfo (SATISFACTION, EMP_NAME, NETADDR_NAME,DDTT, NETADDR_NO, DESCC) values('";
CString usqlB = empEval+"','"+empName+"','"+wdNameTemp+"','"+ddtt+"','"+wdNo+"','descc')";
CString insertMysql = usqlA+usqlB;
if ( !mysql_query(mysql,insertMysql )) {
int a =0 ; a +=a;
}
else{ }
====================================================
在这里贴出我的代码,
在VS2005下代码页环境是gb2312,CString的默认编码不知道是什么
假如我定义了一个CStirng str="中国";把str插入到数据库的表中,
网上有将gb2312转utf8的,还有将unicode转utf8的函数,有文章说
上面的那个str应该和代码页的编码相同,那如果是通过socket接收来
的buf呢,应该是什么编码呢,怎样转换呢
另:
这一句是我后来加上去的,
if(mysql_set_character_set(mysql,"utf8"))
{AfxMessageBox("utf8设置不成功!");return 0;}
程序编码设置成功,但insert不了数据,并且没有报任何错误;
如果注释掉这行,程序就能insert数据,但还是乱码,乱码文如下:
=============================================================
INSERT INTO `t_evaluateinfo` (`ID`, `SATISFACTION`, `EMP_NAME`, `NETADDR_NAME`, `DDTT`, `NETADDR_NO`, `DESCC`) VALUES
(1,'满意','小沈阳','南山蛇口营业厅','2010-01-02 08:44:23','wd456','fd'),//这个是手动输入的
(43,'fd',NULL,NULL,NULL,NULL,NULL),
(44,'fd',NULL,NULL,NULL,NULL,NULL),
(45,'ÂúÒâ',NULL,NULL,NULL,NULL,NULL),
(50,'ÂúÒâ',NULL,NULL,NULL,NULL,NULL),
(51,'ÂúÒâ','СÉòÑô','ÄÏɽÉß¿ÚÓªÒµÌü','2010-01-02 08:44:23','wd456','fd'),
(54,'·Ç³£ÂúÒâ','³ÉÁú','ÂÞºþÁ«ÌÁÓªÒµÌü','2010-06-24 15:50:36','wd123','descc'),
=====================================================================================================
还是编码的问题,因为我在网上找了个连接mysql的工具,后面几行不能正常显示的中文字符
却能正常显示,第一行数据却不能正常的显示;
就是编码设置问题,就是找不到原因所在
MySQL 中文显示乱码
{AfxMessageBox("utf8设置不成功!");return 0;}
===============================================
你说加了上面这句,就insert不了数据,要不你测试下insert英文字符看看,
看看能不能添加数据,
你这里的CString变量,哪里有什么unicode字符串?(unicode串,至少是以_T宏或者TEXT宏作前缀的吧)
全是本地的MBS串。
既然是本地串,你没有必要设置encoding为'utf8',而是要设置为'gbk'
mysql_set_character_set(mysql,"gbk")
在这之后,使用程序insert的中文,在同样设置为'gbk'的程序下,取出来的肯定是中文的MBS串,如果界面显示要求使用unicode字符串,将这些MBS串转化成unicode串就行了。至于socket传输,如果是文本,传过来的无非还是文本,原来是什么编码,还是什么编码,但你自己需要知道原来的编码。