2012-02-06 5 views
5
私は

mysqlのSETユーザー定義変数はnullを返しますか?

SET @a =10; 

使用してユーザ定義の変数を作成し

も、私は

SET @a := 10; 

正常に実行された上記のクエリをチェックします。変数にアクセスすると10の代わりにNULLの値が返されます。そして、それは時々私のために起こる道 - - 私はこのクエリ

SELECT @a; 
+1

私にとってうまく動作します。どのバージョンのMySQLを使用していますか?どこでクエリを実行していますか? – Naltharial

+0

後の構文を使用します。SET @a:= 10;それはちょうど私のために働く。変数はTCP接続に結びついていますが、同じセッション中にすべてを試していますか? – Evert

+1

同じセッションでユーザー変数を設定してアクセスする必要があります。 ... SET @ a = 10とSET @ a:= 10は等しい。 – Devart

答えて

1

(クライアントセッションで)これが起こることができる唯一の方法を使用して定義された変数にアクセスし、あなたが上で短いタイムアウトによってビットを取得していますクライアント接続。これは次のようになります。

mysql> set @a = 10; 

mysql> [wait for N+1 minutes, where N is the client timeout] 

mysql> select @a; 
+------+ 
| NULL | 
+------+ 
| NULL | 
+------+ 
1 row in set (0.00 sec) 

変数を初期化して、連続したクライアントセッションで使用する必要があります。セッションがなくなると、すべての変数が失われます。

他の説明は、コメントで他の人が指摘するように、コマンドが異なる接続からサーバーに当たるということです。あなたの問題はタイムアウトではないかもしれませんが、異なる接続で "SET ..."と "SELECT ..."コマンドを発信していることになります。ユーザー変数は、異なる接続間で共有されません。

関連する問題