2010年8月19日

[mysql 15375] Re: int column への2147483648

奥野です。こんばんは。

bind[0].is_unsigned = 1にしましょう。
そうしないと符号付き32ビット整数の最大値=2147483647に
引っかかってしまいます。

ではでは。

On 08/19/2010 08:46 PM, Etsuo SUMIYA wrote:
> 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日 21:50
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97812
トラックバック
コメント
コメントする




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