我按照mysql参考手册上的例子做的东东..为什么老是出现数据截断问题..

而手册上说一般不会出现的.--中的内容来自手册

------------------------------------------------------------------------------------

MYSQL_DATA_TRUNCATED

出现数据截短。

不返回MYSQL_DATA_TRUNCATED,除非用mysql_options()启用了截短通报功能。返回该值时,为了确定截短的参数是哪个,可检查MYSQL_BIND参数结构的错误成员。

---------------------------------------------------------------------------

SQL代码:

--创建表

CREATE TABLE userinfo

(

userid int,

username varchar(31)

);

--------------------------------------

INSERT INTO test.userinfo

(userid, username)

VALUES (1, '张三');

INSERT INTO test.userinfo

(userid, username)

VALUES (2, '李四');

INSERT INTO test.userinfo

(userid, username)

VALUES (3, '王王');

----------------------------------------------------------------

c++代码:

#include

#include

#include

#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下

using namespace std;

string host = "localhost"; //登陆mysql使用的主机名

string user = "root"; //登陆用户

string pwd = "sa"; //填写自己数据库密码

string dbname = "test"; //您要登陆的数据库名

unsigned int port = 3306; //数据库端口,默认为3306,也可以填写你自己制定的端口

string sql = "select * from userinfo"; //sql语句,下面使用接口在c语言中执行该语句

string sqlProcess = "call getUserArea2(3)"; //sql存储过程语句

int status; //数据库执行返回的状态,sql语句执行成功返回0

int main()

{

MYSQL *mysql;

mysql = mysql_init(0); //接口,初始化

MYSQL_RES *result;

MYSQL_ROW row; //返回数据行

unsigned long length[2];

int row_count;

int int_data;

char str_data[5000];

my_bool is_null[2];

//连接数据库

if (mysql_real_connect(mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS) == NULL)

{

cout << "connect failure!" << endl;

return 0;

}

else

{

cout << "connect success!" << endl;

}

mysql_set_character_set(mysql, "gbk");

//使用预处理

char sql[] = "select userid,username from userinfo where userid!=(?)"; //"call getUserArea(?)"; //

MYSQL_STMT *stmt = mysql_stmt_init(mysql);

if (mysql_stmt_prepare(stmt, sql, strlen(sql)))

{

printf(mysql_stmt_error(stmt));

return 0;

}

int param_count = mysql_stmt_param_count(stmt);

int t1 = 1;

MYSQL_BIND inBind;

memset(&inBind, 0, sizeof(inBind));

inBind.buffer_type = MYSQL_TYPE_LONG;

inBind.buffer = (char *)&t1;

inBind.is_null = 0;

inBind.length = 0;

if (mysql_stmt_bind_param(stmt, &inBind))

{

printf(mysql_stmt_error(stmt));

return 0;

}

if (mysql_stmt_execute(stmt))

{

printf(mysql_stmt_error(stmt));

}

MYSQL_BIND outBind[2];

memset(outBind, 0, sizeof(outBind));

//INTEGER COLUMN

outBind[0].buffer_type = MYSQL_TYPE_LONG;

outBind[0].buffer= (char *)&int_data;

outBind[0].is_null= &is_null[0];

outBind[0].length= &length[0];

//STRING COLUMN

outBind[1].buffer_type= MYSQL_TYPE_STRING;

outBind[1].buffer= (char *)str_data;

outBind[1].buffer_length= 5000;

outBind[1].is_null= &is_null[1];

outBind[1].length= &length[1];

if (mysql_stmt_bind_result(stmt, outBind))

{

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

/* Now buffer all results to client */

if (mysql_stmt_store_result(stmt))

{

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

int rows = mysql_stmt_num_rows(stmt);

for( my_ulonglong i=0; i

{

int r = mysql_stmt_fetch(stmt);

//出现数据截断。就是这里出错的....

if(r == MYSQL_DATA_TRUNCATED) {

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

}

fprintf(stdout, "column1: ");

if (is_null[0]) fprintf(stdout, " NULL\n");

else fprintf(stdout, " %d(%ld)\n", int_data, length[0]);

/* column 2 */

fprintf(stdout, "column2:");

if (is_null[1]) fprintf(stdout, " NULL\n");

else fprintf(stdout, " %s(%ld)\n", str_data, length[1]);

}

mysql_stmt_close(stmt);

return 0;

}

作者: yeerh

发布时间: 2011-01-22

mysql stmt fetch,mysql_stmt_fetch 奇怪的问题..相关推荐

  1. pdo mysql fetchall_pdo fetch,pdo fetchAll,pdo query,pdo prepare用法举例

    通过pdo来从数据库中调取数据. 其中主要涉及到 pdo fetch,pdo fetchAll,pdo query,pdo prepare使用 . 可以通过以下几种方式,学习下php pdo的用法. ...

  2. mysql存储过程fetch into_存储过程fetch into

    SQL Server 中,对结果集及游标的使用[总结] 一.对结果集使用的解决办法 如何在存储过程中使用另一个存储过程的结果集,或者对动态SQL语句的执行结果再次使用,可以使用下面这样的语句: INS ...

  3. mysql size_mysql fetch size 相关问题

    默认情况下,MySQL的JDBC驱动会一下子把所有row都读取下来,这在一般情况下是最优 的,因为可以减少Client-Server的通信开销.但是这样也有一个问题,当数据库查询结 果很大时,特别当不 ...

  4. mysql 的capi预处理

    25.2.4. C API预处理语句 MySQL客户端/服务器协议提供了预处理语句.该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构.对于多次执 ...

  5. mysql优化 top_Top 20+ MySQL Best Practices【sql优化】

    Database operations often tend to be the main bottleneck for most web applications today. It's not o ...

  6. MySQL性能优化的21条最佳经验【转】

    转载自http://www.cnblogs.com/jiaosq/p/5843437.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只 ...

  7. 转:MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  8. php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  9. Spark与Mysql(JdbcRDD)整合开发

    在Spark中提供了一个JdbcRDD类,该RDD就是读取JDBC中的数据并转换成RDD,之后我们就可以对该RDD进行各种的操作.我们先看看该类的构造函数: JdbcRDD[T: ClassTag]( ...

  10. mysql leave的作用_MySQL数据库中DELIMITER的作用

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...

最新文章

  1. 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
  2. mybatis里的log适配器模式
  3. 虚拟化运维平台云安对政府机构的解决方案
  4. 用数组选出最大的数并且排序
  5. NEC描绘智慧城市蓝图
  6. OPPO宣布与哈苏达成影像战略合作
  7. pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)
  8. 设计模式(十五)——桥接模式
  9. unity3d 材质概述 ---- shader
  10. 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系
  11. 洛谷4577 LOJ2521:[FJOI2018]领导集团问题——题解
  12. 响应式微服务架构-分布式系统设计原则
  13. Oracle自定义函数示例
  14. Web3 – The Decentralized Web
  15. 弘辽科技:多多进宝怎么找团长?多多进宝怎么找推手推广?
  16. 前后端分离整合阿里云OSS图片上传功能
  17. opta planner_使用Excel Christmas Planner进行整理
  18. springboot 实现 订单 和 微信扫码支付 功能
  19. SQL中去除重复数据的几种方法,我一次性都告诉你​
  20. ubuntu 12.04英文版设置成中文版

热门文章

  1. 支付宝VS微信支付竞品分析
  2. 微信公众号迁移及公证书快速办理流程
  3. Bootstrap学习(九)collapse折叠窗口、carousel轮播效果、Affix侧边栏
  4. AutoJs学习-抖音自动评论
  5. 文献检索与下载的几种方式
  6. java授权失败_鉴权失败 =(-200)both online
  7. Python学习笔记-2017.5.4thon学习笔记-2017.5.19
  8. 水处理过滤器:常见水处理过滤器的种类大全
  9. 解决网页微信扫码登录报40163
  10. LED恒流驱动IC汇总