/** * Compiled with: * g++ -Wall -I /home/rbouman/mysql/mysql/include -I include -o test_mysql_c_api.bin test_mysql_c_api.c ~/mysql/mysql/lib/libmysqlclient.so * * Output: * Field: ------ c1 length: 15 max_length: 0 charsetnr: 33 Field: ------ c2 length: 30 max_length: 0 charsetnr: 33 * This is not correct. Expected was: * Field: ------ c1 length: 5 max_length: 5 charsetnr: 11 Field: ------ c2 length: 10 max_length: 30 charsetnr: 33 */ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "stdarg.h" #include "dirent.h" #include "mysql.h" #include "plugin.h" #define LOG_ERR(a) fprintf(stderr, "\n%s", a); int main(int argc, char** argv){ int ret = 0; char *sql; MYSQL *mysql = mysql_init(NULL); if (mysql_real_connect( mysql, "localhost", //host "root", //user "mysql", //password "test", //schema 3306, //port "/home/rbouman/mysql/mysqld.sock", //socket CLIENT_IGNORE_SPACE | CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS ) == NULL) { LOG_ERR("Error connecting to MySQL"); LOG_ERR(mysql_error(mysql)); mysql_close(mysql); ret = 1; goto _done; } sql = "set names utf8"; if (mysql_real_query(mysql, sql, strlen(sql))) { LOG_ERR("Error executing sql"); LOG_ERR(sql); LOG_ERR(mysql_error(mysql)); ret = 2; goto _cleanup_conn; } sql = "drop table if exists t"; if (mysql_real_query(mysql, sql, strlen(sql))) { LOG_ERR("Error executing sql"); LOG_ERR(sql); LOG_ERR(mysql_error(mysql)); ret = 3; goto _cleanup_conn; } sql = "create table t(c1 varchar(5) charset ascii, c2 varchar(10) charset utf8)"; if (mysql_real_query(mysql, sql, strlen(sql))) { LOG_ERR("Error executing sql"); LOG_ERR(sql); LOG_ERR(mysql_error(mysql)); ret = 3; goto _cleanup_conn; } sql = "select * from t"; if (mysql_real_query(mysql, sql, strlen(sql))) { LOG_ERR("Error executing sql"); LOG_ERR(sql); LOG_ERR(mysql_error(mysql)); ret = 4; goto _cleanup_conn; } MYSQL_RES* mysql_res; if ((mysql_res = mysql_store_result(mysql)) == NULL) { LOG_ERR("Error storing result"); LOG_ERR(sql); LOG_ERR(mysql_error(mysql)); ret = 5; goto _cleanup_conn; } MYSQL_FIELD* field; while ((field = mysql_fetch_field(mysql_res))){ LOG_ERR("Field:"); LOG_ERR("------"); LOG_ERR(field->name); fprintf(stderr, "\nlength: %i", (int)field->length); fprintf(stderr, "\nmax_length: %i", (int)field->max_length); fprintf(stderr, "\ncharsetnr: %i", (int)field->charsetnr); } mysql_free_result(mysql_res); _cleanup_conn: mysql_close(mysql); _done: return ret; }