Hi,

Using server version: 11.2.2, I try to extract data from a database with this C-code:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mysql.h>

define MAXFLEN 66

char *bo_src = "SELECT FILENAMME, FILENUM FROM BOEK WHERE TOKENS IS NULL ORDER BY UDC_KOADE, FILENUM";


char   filename[MAXFLEN],
       stavering[3];

long   filenum;

int fetch_result;

MYSQL      *bo_src_sql;
MYSQL_ST MT *bo_src_stmt;
MYSQL_RES  *bo_src_res;
MYSQL_BIND  bo_src_bind[2],
            bo_src_bind_result[2];

int main (argc, argv)

     int argc;
  char *argv[];

  {  bo_src_sql = mysql_init(bo_src_sql)
  ;  if ((bo_src_stmt = mysql_stmt_init(bo_src_sql))==NULL)
        printf ("Can't initialize %s:\n %s/n", bo_src, mysql_error(bo_src_sql))
  ;  if (!mysql_real_connect(bo_src_sql,"localhost","<user>","<passwd>","tdb",0,NULL,0))
        fprintf(stderr, "Failed to connect to book table for select: Error: %s\n", mysql_error(bo_src_sql))
  ; if (mysql_stmt_prepare(bo_src_stmt, bo_src, strlen(bo_src)))
        printf ("Can't prepare %s:\n %s\n", bo_src, mysql_error(bo_src_sql))
  ;  bo_src_bind_result[0].buffer_type   = MYSQL_TYPE_STRING
  ;  bo_src_bind_result[0].buffer        = filename
  ;  bo_src_bind_result[0].buffer_length = 100
  ;  bo_src_bind_result[1].buffer_type   = MYSQL_TYPE_LONG
  ;  bo_src_bind_result[1].buffer        = (long *)&filenum
  ;  bo_src_bind_result[1].buffer_length = sizeof (filenum)
  ;  memset (bo_src_bind, 0, sizeof (bo_src_bind))
  ;  memset (bo_src_bind_result, 0, sizeof (bo_src_bind_result))
  ;  if (mysql_stmt_bind_param (bo_src_stmt, bo_src_bind))
       fprintf(stderr, "Failed to bind parameters in %s: \n Error: %s\n", bo_src, mysql_error(bo_src_sql))
  ;  if (mysql_stmt_bind_result(bo_src_stmt, bo_src_bind_result))
       fprintf(stderr, "Failed to bind result in %s: \n Error: %s\n", bo_src, mysql_error(bo_src_sql))
  ;  if (!mysql_stmt_execute (bo_src_stmt))
        {  fetch_result = mysql_stmt_fetch(bo_src_stmt)
        ;  if  (fetch_result == 0)
                printf ("%ld %s %s\n", filenum, filename, stavering)
        ;  else if (fetch_result == MYSQL_NO_DATA)
                    printf ("No data found\n")
        ;       else if (fetch_result == MYSQL_DATA_TRUNCATED)
                         printf ("Data truncated.\n%d/n", fetch_result)
        ;            else printf ("Something else! %d \n%s/n", fetch_result, mysql_error(bo_src_sql));
        }
  ;  mysql_stmt_close(bo_src_stmt)
  ;  mysql_close(bo_src_sql);
  }

The definition of the table is

describe BOEK;
+-----------+-------------------------------+------+-----+---------+----------------+
| Field     | Type                          | Null | Key | Default | Extra          |
+-----------+-------------------------------+------+-----+---------+----------------+
| FILENUM   | smallint(4)                   | NO   | PRI | NULL    | auto_increment |
| TITEL     | varchar(50)                   | YES  |     | NULL    |                |
| UDC_KOADE | varchar(10)                   | YES  |     | NULL    |                |
| ISBN      | bigint(13)                    | YES  |     | NULL    |                |
| FILENAMME | varchar(20)                   | YES  |     | NULL    |                |
| SKR_NUM   | smallint(5)                   | YES  |     | NULL    |                |
| UTJ_NUM   | smallint(5)                   | YES  |     | NULL    |                |
| UTJ_DATUM | date                          | YES  |     | NULL    |                |
| OERSET    | tinyint(1)                    | YES  |     | NULL    |                |
| PRINTINGE | smallint(3)                   | YES  |     | NULL    |                |
| YNL_DATUM | date                          | YES  |     | NULL    |                |
| STAVERING | enum('ald','mid','nij','int') | YES  |     | NULL    |                |
| TOKENS    | smallint(6)                   | YES  |     | NULL    |                |
| TYPES     | smallint(5)                   | YES  |     | NULL    |                |
| MAXTOKENS | smallint(6)                   | YES  |     | NULL    |                |
| MAXTYPES  | smallint(5)                   | YES  |     | NULL    |                |
| TIID      | time                          | YES  |     | NULL    |                |
+-----------+-------------------------------+------+-----+---------+----------------+

So the size of FILENAMME, varchar20, is much smaller than the buffer length specified in the code:

  ;  bo_src_bind_result[0].buffer_type   = MYSQL_TYPE_STRING
  ;  bo_src_bind_result[0].buffer        = filename
  ;  bo_src_bind_result[0].buffer_length = 100

Yet I get a MYSQL_DATA_TRUNCATED fetching the result of the query.

Debugging, only the integer filenum gets its value.

The statement (SELECT FILENAMME, FILENUM FROM BOEK WHERE TOKENS IS NULL ORDER BY UDC_KOADE, FILENUM;) gives the expected result when entered in a terminal session.

I obviously do something wrong, but I can't find out what. Googling gets me no answer.

Anyone who can spot the error?

Many thanks in advance,

best regards, Jogchum