c连MySQL ,insert后数据乱码了

avalonBBS 2006-12-17 10:22:13
:~> mysql -u zhongyi -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22 to server version: 5.1.12-beta

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use ZhongYi
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> describe zy;

+--------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+----------------+
| xuhao | int(5) unsigned zerofill | NO | PRI | NULL | auto_increment |
| fenqu | char(30) | YES | | NULL | |
| bianma | int(6) unsigned zerofill | YES | | NULL | |
| liexin | char(30) | YES | | NULL | |
| weizhi | char(30) | YES | | NULL | |
+--------+--------------------------+------+-----+---------+----------------+

5 rows in set (0.15 sec)


cat 中宜编程资料.doc

001 第一分区 01001 光电感烟 二层东后区
002 第一分区 01002 光电感烟 二层东后区

.................................



file 中宜编程资料.doc
中宜编程资料.doc: ISO-8859 text



main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
//#include <sys/iconv.h>
//#include "/usr/src/sys/sys/iconv.h"
#include "/usr/src/bin/csh/iconv.h"
#include "/usr/local/include/mysql/mysql.h"

int
main(int argc,char **argv)
{
MYSQL mysql;
FILE *fp;

if( 2 != argc ){
fprintf(stderr,"Usage:./prog inputfile\n");
exit(-1);
}

if( NULL == (fp=fopen(argv[1],"r")) ){
fprintf(stderr,"%s\n",strerror(errno));
exit(-1);
}
fprintf(stdout,"file %s opend...\n",argv[1]);

mysql_init(&mysql);
if(NULL==mysql_real_connect(&mysql,"localhost","zhongyi","localhost","ZhongYi",0,NULL,0)){
fprintf(stderr,"Failed to connect to database: Error: %s\n",mysql_error(&mysql));
exit(-1);
}
fprintf(stdout,"DataBase Connected...\n");

/* --------------------------------- */
/* 021 第一分区 010021 光电感烟 一层东后区 */
for(char buf[4096]; NULL != fgets(buf,4096,fp); ){
/*
* | fenqu | char(30)
* | bianma | int(6) unsigned zerofill
* | liexin | char(30)
* | weizhi | char(30)
*/
char query[1024]="INSERT INTO zy(fenqu,bianma,liexin,weizhi) VALUES('";
char *iter_b,*iter_e;

for(iter_b=buf; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"',");
for(iter_b=iter_e; ' '==*iter_b; ++iter_b);
for(iter_e=iter_b; ' '!=*iter_e; ++iter_e);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,",'");
for(iter_b=iter_e; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"','");
for(iter_b=iter_e; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"')");

/* iconv */
iconv_t cd;
char outbuf[1024];
size_t in=strlen(query),out=1024;

if( (iconv_t)-1 == (cd = iconv_open("UTF-8","GBK")) ){
fprintf(stderr,"Iconv_open Error: %s\n",strerror(errno));
exit(-1);
}
if( (size_t)-1 == iconv(cd,(char **)&query,(size_t *)&in,(char **)&outbuf,(size_t *)&out) ){
fprintf(stderr,"Iconv Eoor: %s\n",strerror(errno));
exit(-1);
}

if( mysql_real_query(&mysql,outbuf,out) ){
fprintf(stderr,"Error making query: %s\n",mysql_error(&mysql));
}

if( -1 == iconv_close(cd) ){
fprintf(stderr,"Iconv_close Error: %s\n",strerror(errno));
exit(-1);
}
}

fclose(fp);
mysql_close(&mysql);

exit(0);
}


上面代码中iconv部分我不知道怎么写,如果去掉那部分,程序可以运行,但插在zy数据库中的汉字部分全是乱码:cry:cry:cry
...全文
350 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
avalonBBS 2007-03-05
  • 打赏
  • 举报
回复
thx
福贵 2006-12-18
  • 打赏
  • 举报
回复
mysql默认的字符编码就是iso-8859-1
java里面这样转的
字符串.getBytes("iso-8859-1"),"要转成的字符编码")
avalonBBS 2006-12-17
  • 打赏
  • 举报
回复
我又改了一下,加了character and set names在程序里,这回又出现问号了 *___*

if( 0 != mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"utf8")){
fprintf(stderr,"mysql_options Error: %s\n",mysql_error(&mysql));
exit(-1);
}
if( 0 != mysql_set_character_set(&mysql,"utf8") ){
fprintf(stderr,"mysql_set_character_set Error: %s\n",mysql_error(&mysql));
exit(-1);
}

/* --------------------------------- */
/* 021 第一分区 010021 光电感烟 一层东后区 */
for(char buf[4096]; NULL != fgets(buf,4096,fp); ){
/*
* | fenqu | char(30)
* | bianma | int(6) unsigned zerofill
* | liexin | char(30)
* | weizhi | char(30)
*/
char query[1024]="INSERT INTO zy(fenqu,bianma,liexin,weizhi) VALUES('";
char *iter_b,*iter_e;

for(iter_b=buf; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"',");
for(iter_b=iter_e; ' '==*iter_b; ++iter_b);
for(iter_e=iter_b; ' '!=*iter_e; ++iter_e);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,",'");
for(iter_b=iter_e; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"','");
for(iter_b=iter_e; 0 < *iter_b; ++iter_b);
for(iter_e=iter_b; 0 > *iter_e; iter_e+=2);
strncat(query,iter_b,iter_e-iter_b);
strcat(query,"')");

/* iconv */
/*
iconv_t cd;
char outbuf[1024];
size_t in=strlen(query),out=1024;

if( (iconv_t)-1 == (cd = iconv_open("UTF-8","GBK")) ){
fprintf(stderr,"Iconv_open Error: %s\n",strerror(errno));
exit(-1);
}
if( (size_t)-1 == iconv(cd,(char **)&query,(size_t *)&in,(char **)&outbuf,(size_t *)&out) ){
fprintf(stderr,"Iconv Eoor: %s\n",strerror(errno));
exit(-1);
}
*/

if( mysql_real_query(&mysql,query,strlen(query)) ){
fprintf(stderr,"Error making query: %s\n",mysql_error(&mysql));
}

/*
if( -1 == iconv_close(cd) ){
fprintf(stderr,"Iconv_close Error: %s\n",strerror(errno));
exit(-1);
}
*/
}

fclose(fp);
mysql_close(&mysql);

exit(0);
}
jackeyabc 2006-12-17
  • 打赏
  • 举报
回复
不懂,帮顶~期望早点解决~
avalonBBS 2006-12-17
  • 打赏
  • 举报
回复
我加了这两行,依旧

if( 0 != mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"utf8")){
fprintf(stderr,"mysql_options Error: %s\n",mysql_error(&mysql));
exit(-1);
}
if( 0 != mysql_set_character_set(&mysql,"utf8") ){
fprintf(stderr,"mysql_set_character_set Error: %s\n",mysql_error(&mysql));
exit(-1);
}
supergaucau 2006-12-17
  • 打赏
  • 举报
回复
要用utf8字符集,连接成功后执行"set names utf8"
代码转载自:https://pan.quark.cn/s/2af55a97eb0f **INA226测试程序参考** 在电子工程和嵌入式系统开发领域,INA226被认为是一款高精度且低功耗的电流与电源监控器,其应用范围广泛,涵盖电池管理系统、电源路径管理以及智能能源监测等多个方面。该芯片由德州仪器(Texas Instruments)负责生产,能够提供精确的电流和电压测量结果,并具备灵活的配置选择。 **INA226芯片功能详解** INA226的核心特性包括: 1. **双向电流测量**:能够测量流经设备的正向电流和反向电流。 2. **高压和低压测量**:支持高达60V的电压测量,同时可以测量从微安到安培范围内的电流。 3. **内置模拟电路**:集成了一个精密运算放大器、一个电流检测放大器以及一个高精度电压基准。 4. **I2C接口**:通过标准的I2C接口与微控制器进行通信,便于读取测量数据。 5. **多种配置模式**:允许选择不同的电流和电压范围,以适应不同应用场景的需求。 6. **低功耗**:在待机状态下,功耗非常低,适合用于电池供电的设备。 **平台IO与ESP8266开发环境** `PlatformIO`是一个开源的跨平台集成开发环境,专注于物联网(IoT)项目的开发。它整合了构建系统、库管理和设备支持,显著简化了嵌入式开发流程。`ESP8266`是由乐鑫科技推出的一款低成本且高性能的Wi-Fi微控制器,常用于智能家居和物联网领域。 在`PlatformIO`中配置和编写针对`ESP8266`的INA226测试程序,需要遵循以下步骤: 1. **安装PlatformIO**:在IDE(例如Visual Studio Code、Atom等...
已经博主授权,源码转载自 https://pan.quark.cn/s/6b24333d46cf 这里所说的激光扫描测距仪的实质就是3D激光雷达。 如上面视频中展现的那样,扫描仪可 以获取各转角情况下目标物体扫描截面到扫描仪的距离,由于这类数据在可视化后看起来像 是由很多小点组成的云团,因此常被称之为:点云(PointClould)。 在获得扫描的点云后,可以在计算机中重现扫描物体/场景的三维信息。 自制激光3D扫描仪的知识点涵盖了多个方面,包括激光雷达的基本概念、激光扫描测距的原理、以及如何低成本实现3D激光扫描。 以下是对这些知识点的详细阐述。 激光雷达是一种通过激光测距获取物体表面信息的设备。 它通常用于机器人导航、3D模型重建和地图测绘等领域。 激光雷达能够获取目标物体在各个转角情况下的扫描截面到扫描仪的距离,并将这些数据可视化成点云(Point Cloud)。 点云是由大量小点组成的三维数据模型,这些小点模拟了物体或场景的三维结构。 在制造激光3D扫描仪时,需要考虑的关键原理包括激光三角测距原理和线状激光进行截面测距的原理。 激光三角测距原理是指通过测量发射激光与反射激光之间的角度差异来确定距离。 而线状激光进行截面测距原理则是指将点状激光改变成线型光束,一次性获得整个扫描截面的数据。 市面上的激光雷达产品价格昂贵,主要因素包括使用高速光学振镜进行大角度扫描、通过计算发射/反射激光束相位差的测距手段、以及矫正算法和人工成本。 但个人DIY自制激光雷达时,可以通过降低对精度和性能的要求来大幅降低成本。 例如,使用三角测距方式替代成本较高的TOF测距方式,或者使用普通电机机构驱动激光器来替代高速振镜。 自制激光3D扫描仪的实现,可以考虑制作一个能够测量一个点的设备,并采用类似的三角测距...
源码下载地址: https://pan.quark.cn/s/3219d6680487 《Areson鼠标测试程序详解》 在计算机硬件范畴内,鼠标作为核心的输入设备,其功能表现与运行可靠性直接关联到用户的实际操作感受。对于专业操作人员或鼠标生产厂商而言,执行系统化的鼠标检测是不可或缺的操作环节。本文将细致剖析名为"AresonMouseTestProgram.exe"的鼠标检测应用软件,旨在帮助使用者掌握其各项功能、操作流程以及在提升和改进鼠标运行状态方面的关键作用。 "AresonMouseTestProgram.exe"是一款专门为Areson鼠标品牌研发的检测应用,其核心目标是综合评定鼠标的多项性能参数,涵盖灵敏度级别、精确度水平、反应速率以及按键使用寿命等。该应用的推出,为使用者提供了方便的自主检测途径,同时也为企业实施质量管控提供了有力的技术支撑。 我们需要明确的是,鼠标的检测工作主要包含以下几个核心组成部分: 1. **移动速度与灵敏度评估**:检测程序能够模拟不同速度范畴内的鼠标移动轨迹,考察鼠标的追踪效能,确保在高速移动时的准确定位能力。 2. **点击功能验证**:借助自动化点击功能测试,确认鼠标主键和副键的反应时间、耐久程度以及操作一致性,有效规避双击或多重点击故障。 3. **滚动功能检测**:针对滚轮装置或触摸条进行功能验证,衡量其滚动速率、运行平稳性以及是否存在跳动或卡滞故障。 4. **传感器工作状态分析**:检测鼠标的光学或激光感应装置,研究其在不同工作环境下的运行效果,保障在各种条件下都能实现稳定追踪。 5. **连接可靠性验证**:对于无线鼠标产品,检测其无线连接的稳定程度与传输延迟,确保数据交换的准确无误。 应用"Areson...

57,064

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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