質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

2333閲覧

mysqlユーザー定義変数

mint.cherry

総合スコア284

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/04/21 01:51

編集2016/04/21 01:56

初心者的な質問ですいません。

次のselectの足し算の結果が1になるのでしょうか?
:=を使用すると正しく7と出てくるのはわかります。

set @t1=1,@t2=2,@t3=4; select @t1,@t2,@t3,@t4 = @t1+@t2+@t3; +------+------+------+-------------------+ | @t1 | @t2 | @t3 | @t4 = @t1+@t2+@t3 | +------+------+------+-------------------+ | 1 | 2 | 4 | 1 | +------+------+------+-------------------+ 1 row in set (0.00 sec)

select @t1,@t2,@t3,@t4 = @t1;
など単体でやったりしましたが0になりました。

初歩的な質問ですいませんがよろしくお願いします

追記で質問します。
なぜAになったのでしょうか?

set @v1 = b'1000001'; select @v1; +------+ | @v1 | +------+ | A | +------+ 1 row in set (0.00 sec)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この内容だと、おそらく公式マニュアルを読まれたんですよね?
https://dev.mysql.com/doc/refman/5.6/ja/user-variables.html
いずれもこちらに書かれているとおりになりますね。

SET 以外のステートメントで、ユーザー変数に値を割り当てることもできます。この場合、= は SET 以外のステートメントでは比較演算子 = として扱われるので、割り当て演算子にはこちらではなく、:= を使用する必要があります。

つまり「@t4 = @t1+@t2+@t3」という比較が正しいかどうかの結果が表示されている、ということになります。足し算した結果が出ているわけではないのです。
(尚、こちらの環境で試すと1でも0でもなくNULLになりました。別途@t4に値をセットしたりしていませんか?)

変数@t4に計算結果を代入したいのであれば、おっしゃるとおり「:=」を使用する必要があります。
もし@t4という名前で表示したいだけであれば↓というのもあります。

sql

1set @t1=1,@t2=2,@t3=4; 2SELECT @t1 , @t2 , @t3 , @t1 + @t2 + @t3 AS '@t4'

ユーザー変数に割り当てられたビット値は、バイナリ文字列として扱われます。

ビット値「1000001」はAという文字にあたるので、Aという文字として扱われているだけです。
(そもそも文字コードについてご存じなければ調べてみてください。ざっくりした内容だとこことか)

投稿2016/04/21 04:50

takushi168

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mint.cherry

2016/04/21 09:42 編集

回答有り難うございます。 はいそのチュートリアルをやっていました。 自分も確認してNULLになっていました。多分一時的に代入していたんだと思います。。 混乱していましたがいますっきりしています。ありがとうです。 追記質問に関してですが恥ずかしながらそもそも文字コードについてがわかりませんでした。そのようなものがあるのですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問