#include <stdio.h>
#include <strings.h>
#include <mysql.h>
#include <assert.h>
#include <stdlib.h>


#define qry(q) if (mysql_query(dbh,q) != 0) { puts(mysql_error(dbh)); exit(1); }

void hexout(char *msg,char lit[], int out)
{
  int i;
  char c;
  puts(msg);
  for (i=0;i<out;i++)
  {
    c = lit[i];
    printf("%02X " ,c &255);
  };
  printf("\n");
}

int main()
{
    MYSQL *dbh;
    MYSQL_RES *query_result;
    MYSQL_ROW row;
    char japanese_message[] = {(char)0x95, (char) 0x00};
    char query[200],escaped_message[10];
    int esc_len;

    
    
    /* INIT */
    dbh = mysql_init(NULL);
    if (!mysql_real_connect
	(dbh, NULL, "root", NULL, "test", 3306, NULL, 0)) {
	printf("Cannot connect %s", mysql_error(dbh));
    };

   assert(mysql_query(dbh,"select version()") == 0);
   query_result = mysql_store_result(dbh);
   assert((row = mysql_fetch_row(query_result))!= NULL);
   printf("mysql version is: %s\n", row[0]);
   mysql_free_result(query_result);
    
   
   qry("drop table if exists `blob_tbl`");
   qry("CREATE TABLE `blob_tbl` (  `c1` BLOB ) ENGINE = MyISAM DEFAULT CHARSET = cp932");
   qry("set names cp932"); 
   hexout("Original",japanese_message,2);
   esc_len = mysql_real_escape_string(dbh, escaped_message, japanese_message, 2);
   hexout("Escaped",escaped_message,esc_len);
   sprintf(query,"INSERT INTO blob_tbl select '%s'",escaped_message);
   qry(query);

   assert(mysql_query(dbh,"select c1 from blob_tbl") == 0);
   query_result = mysql_store_result(dbh);
   assert((row = mysql_fetch_row(query_result))!= NULL);
   hexout("From server",row[0], strlen(row[0]));
   mysql_free_result(query_result);


   mysql_close(dbh);
}
