2009-08-03 21 views
9

set @a = "1";のような変数を定義するとします。 @aが文字列であることをどのように確認できますか?MySQLの変数の型を取得

+0

私はここにあなたのアプローチを得ることはありません。私はあなたがmysqlで変数型を取得できるとは思わないが、私は間違っている可能性があります – marcgg

+0

@marcgg、私はあなたが彼が何を意味するのかと思います。 – Pacerier

+0

変数は特定の型で前に宣言しなければならないので、@aは文字列であることをすでに知っているはずです。しかし明らかにここではさらに進んでいます。あなたはこれで何を達成しようとしていますか? –

答えて

4

MySQLの変数のタイプを判別することはできません。 MySQLのマニュアルにキャストについて

@a = CAST(123 AS CHAR); 

詳しい情報と例:

11.9. Cast Functions and Operators

+1

MySQLの変数の型を決定できます。下の私の答えを見てください。 – 5lava

10
代替として

、あなたは簡単にあなたが望む形であなたの変数をCAST()することができます

MySQLの変数のタイプを判別できます。変数を選択して表を作成し、列のタイプを確認してください。

set @a:="1"; -- your variable 

drop temporary table if exists foo; 
create temporary table foo select @a; -- dirty magic 
desc foo; 
+-------+----------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+----------+------+-----+---------+-------+ 
| @a | longtext | YES |  | NULL |  | 
+-------+----------+------+-----+---------+-------+ 
+0

これは、正しいデータ型を返すようではありません。 – Pacerier

+1

_そうじゃないですか?_もっと具体的に教えてください。 'Type'カラムは内部的にMySQL **で表現されているように変数型を反映します。最小/最適である必要はありません。例えば、 'longtext'は私の例のように魔法のように' varchar(1) 'や' tinyint(1) 'になることはありません。 – 5lava

+0

これは、[別のスレッド](http://dba.stackexchange.com/q/57363/9405)で言及されているように盗聴されているようです...返された型テンポラリテーブル内の変数は**同じ型**です。 'create table foo select @ a'を実行したときに何らかの暗黙の変換が行われたようです...単純な整数の場合はlonglong、単純なビットフィールドの場合はlongblobを返します。 – Pacerier

0

MySqlでは、変数のデータ型を特定できません。しかしcastを使用して文字列のみと整数を識別するための方法があります:

set @a = "11"; 
SELECT CAST(@a AS SIGNED); // Output : 11 

set @a = "text"; 
SELECT CAST(@a AS SIGNED); // Output : 0 


set @a = "121212"; 
SELECT CAST(@a AS SIGNED); // Output : 121212 

set @a = "Mysql is open source"; 
SELECT CAST(@a AS SIGNED); // Output : 0 
関連する問題