2010年8月19日

[mysql 15374] int column への2147483648

sumiyaといいます。

mysql-5.1.47-winを使用していて、mysql_stmt_prepare()を使い、データ
ベースへ書き込むアプリケーションを開発していますが、添付のプログラ
ムを実行すると、

mysql> select * from t;
+------------+

| c1 |
+------------+
| 2147483647 |
| 0 |
+------------+
2 rows in set (0.03 sec)

となり、2147483648が書き込まれずに、0になってしまいます。
mysqlコマンドでは書き込めるのですが、プログラムインタフェースから
は上の結果となります。

環境はWindows XP SP3
Visual studio 2003
を使用しております。

どなたか、情報をお持ちの方はアドバイスをお願いします。

--- テーブル ---
CREATE TABLE `t` (
`c1` int(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=sjis
--- ここまで ---

--- プログラム ---
#include "stdafx.h"
#include <config-win.h>
#include <mysql.h>

MYSQL *mysql;

int mytest();

int _tmain(int argc, _TCHAR* argv[])
{
mytest();
return 0;
}

int mytest()
{
static MYSQL_BIND bind[1];
int result;
unsigned int stat;
my_bool statnull = 0;
char *insert = "INSERT INTO t (c1) values (?)";
MYSQL_STMT *tstmt;

MYSQL *mymysql;
mysql = mysql_init(NULL);
if(mysql) {
mymysql = mysql_real_connect(mysql, "192.168.48.15", "test", "", "test", 0, NULL, CLIENT_MULTI_STATEMENTS);
} else exit(-1);

tstmt = mysql_stmt_init(mysql);
result = mysql_stmt_prepare(tstmt, insert, (unsigned long)strlen(insert));
memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_LONG;
bind[0].buffer = (char *)&stat;
bind[0].length = 0;
bind[0].is_null = &statnull;
result = mysql_stmt_bind_param(tstmt, bind);
stat = 0x80000000-1;
result = mysql_stmt_execute(tstmt);
stat = 0x80000000;
result = mysql_stmt_execute(tstmt);
return(0);
}
--- ここまで ---


投稿者 xml-rpc : 2010年8月19日 20:46
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97811
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。