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

私がユーザー定義変数を作成したとき

SET @a =10; 

私もチェックした

SET @a := 10;

上記のクエリは正常に実行されました。変数にアクセスすると 10 ではなく NULL の値が返されます。このクエリを使用して定義済みの変数にアクセスしました

SELECT @a;
5
後者の構文を使う:SET @a:= 10;それはちょうど私のために働く。変数はTCP接続に結びついていますが、同じセッション中にすべてを試していますか?
追加された 著者 Evert,
同じセッションでユーザー変数を設定してアクセスする必要があります。 ... SET @ a = 10とSET @ a:= 10は等しい。
追加された 著者 Devart,
同時にではなく、同じセッションで(mysql接続)。ツールによっては、別の接続を開くことがあります。これらのステートメントをスクリプトとして実行するか、MySQLコマンドラインツールで実行してみてください。 dev.mysql.com/doc/refman/5.5/ja/mysql.html
追加された 著者 Devart,
'SELECT CONNECTION_ID();'を実行してみてください。 'SET @ a = 10;'の後のクエリ「SELECT @a;」の後にそのセッションを確認します。
追加された 著者 Devart,
私が使用しているバージョンはMySQL 5.1.49-1ubuntu8.1です。これはmysqlクエリブラウザで実行しています
追加された 著者 Sam T,
私は同じセッションの意味を持っていない、あなたは同時にすべてを実行することを意味する..
追加された 著者 Sam T,
@Devartはい、それはコマンドラインツールでうまくいきますが、私はubuntuプラットフォームのクエリーブラウザで正しく動作するかどうかはまだ分かりません。
追加された 著者 Sam T,
@Devart、はいそれは私にCONNECTION_ID AS 1を与える、私はWindowsプラットフォームでこれを試して、それはとにかくあなたの貴重なコメントのおかげで、うまく動作し、私はこれについていくつかの研究を置く必要があります、そして明日、、ありがとう。
追加された 著者 Sam T,
私のためにうまく動作します。どのバージョンのMySQLを使用していますか?どこでクエリを実行していますか?
追加された 著者 Naltharial,

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 ..."コマンドを発信していることになります。ユーザー変数は、異なる接続間で共有されません。

1
追加された