c++,mysql,插入中文记录,乱码,经过一天半的搜索与寻找还是没有把问题搞清楚。

[v]tianyu_edu 2008-10-21 02:27:28
我详细说一下情况:

以下是环境:mysql>status;

Connection id: 11
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.22-community-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 1 hour 22 min 7 sec


my.ini的内容
[client]

port=3306

[mysql]

default-character-set=gbk
[mysqld]
....
default-character-set=gbk


db.opt里的设置是这样的default-character-set=gbk
default-collation=gbk_chinese_ci

执行:show create table vehicle_info:

CREATE TABLE `vehicle_info` (
`VID` int(11) NOT NULL auto_increment,
`VNO` varchar(45) NOT NULL,
`COLOR` varchar(10) default NULL,
`OWN_DEPART` int(11) default NULL,
`IN_DATE` datetime default NULL,
`OTHER` varchar(200) default NULL,
`TERMINAL_ID` int(11) default NULL,
`GROUP_ID` int(11) default NULL,
`SERIAL` varchar(20) default NULL,
`STATUS` int(11) default NULL,
`FACTORY` varchar(50) default NULL,
`FCT_SN` varchar(20) default NULL,
`ENGINE_SN` varchar(50) default NULL,
`FRAME_SN` varchar(50) default NULL,
PRIMARY KEY (`VID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPRESSED


现在症状是:在mysql administrator里中文字段可显示,可插入。在程序里跟踪sql包含中文字符串比如
INSERT INTO vehicle_info (VID,VNO,COLOR,OWN_DEPART,IN_DATE,TERMINAL_ID,GROUP_ID,SERIAL,STATUS,FACTORY,FCT_SN,ENGINE_SN,FRAME_SN,OTHER) VALUES ('2','A-12312','白色','1','08-10-21 14:21:54','1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),mysql_real_query返回值为1,即不成功,错误提示为:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1。

如果把语句放到administator里则可以插入。

如果都改为utf8,查询结果在listCtrl中显示乱码,

针对以上情况,高人请指点一二。。!


...全文
856 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
compassion 2009-06-17
  • 打赏
  • 举报
回复
连接字符串中添加"charset=gbk",如下:
conn.ConnectionString = @"Server=" + DataBaseOperator.strIP
+ ";Database=" + DataBaseOperator.strDataBaseName + ";Uid=" + DataBaseOperator.strAccountName + ";Pwd=" + DataBaseOperator.strPassWord + ";charset=gbk;";
一条晚起的虫 2008-10-22
  • 打赏
  • 举报
回复
如果都改为utf8,查询结果在listCtrl中显示乱码,
//你的工程师Unicode还是ANSI?
//unicode,取到数据库内容后,用MultiByteToWideChar转为unicode,再显示
//ANSI,取到数据库内容后,用MultiByteToWideChar转为unicode,再用WideCharToMultiByte转为ANSI,再显示
sanshao27 2008-10-22
  • 打赏
  • 举报
回复
你的mysql是什么版本,我估计是版本问题
一条晚起的虫 2008-10-22
  • 打赏
  • 举报
回复
MySQL的默认字符集是UTF-8,你插入的字符是UTF-8吗?
[v]tianyu_edu 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Mackz 的回复:]
自动增长的关键字字段(VID)不能赋值吧。
[/Quote]

恩,这里确实是个问题,被我忽略了,可是改过之后也是不行。谢谢Mackz
yjgx007 2008-10-22
  • 打赏
  • 举报
回复
取到的是UTF-8编码字符串,要正常显示,先转成unicode,再转成ANSI
一条晚起的虫 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 du_niao 的回复:]
Server version: 5.0.22-community-nt

我的工程为多字符集
没有经过转化
[/Quote]
//取到的是UTF-8编码字符串,要正常显示,先转成unicode,再转成ANSI
[v]tianyu_edu 2008-10-22
  • 打赏
  • 举报
回复
Server version: 5.0.22-community-nt

回6楼:
我的工程为多字符集
没有经过转化
菜牛 2008-10-21
  • 打赏
  • 举报
回复
自动增长的关键字字段(VID)不能赋值吧。
JJZHK 2008-10-21
  • 打赏
  • 举报
回复
up

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧