私がそうするなら、私はCAST(1 AS SIGNED INTEGER)
いつもBIGINT
返されることになります、例えば:
$ mysql -u root -p --column-type-info
Enter password:
--- Copyright and help message snipped for brevity ---
mysql> select cast(1 as signed integer);
Field 1: `cast(1 as signed integer)`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: LONGLONG <== LONGLONG i.e. 64 bit integer
Collation: binary (63)
Length: 1
Max_length: 1
Decimals: 0
Flags: NOT_NULL BINARY NUM
+---------------------------+
| cast(1 as signed integer) |
+---------------------------+
| 1 |
+---------------------------+
1 row in set (0.00 sec)
そのキャストからの戻り値の型はLONG
(32ビット整数)であると期待していました。
が含まれているテーブルから列を選択すると、INT
実際には単なるLONG
:
mysql> describe contact;
+------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+----------------+
| contact_id | int(11) | NO | PRI | NULL | auto_increment |
== remainder of table snipped ==
mysql> select contact_id from contact where contact_id = 20;
Field 1: `contact_id`
Catalog: `def`
Database: `centreon`
Table: `contact`
Org_table: `contact`
Type: LONG <== LONG i.e. 32 bit integer
Collation: binary (63)
Length: 11
Max_length: 2
Decimals: 0
Flags: NOT_NULL PRI_KEY AUTO_INCREMENT NUM PART_KEY
+------------+
| contact_id |
+------------+
| 20 |
+------------+
1 row in set (0.00 sec)
mysql>
同じ列を符号付き整数にキャストすると、再び64ビット整数が返されます。
mysql> select CAST(contact_id as signed integer) from contact where contact_id = 20;
Field 1: `CAST(contact_id as signed integer)`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: LONGLONG
Collation: binary (63)
Length: 11
Max_length: 2
Decimals: 0
Flags: NOT_NULL BINARY NUM
+------------------------------------+
| CAST(contact_id as signed integer) |
+------------------------------------+
| 20 |
+------------------------------------+
1 row in set (0.00 sec)
同様に報告された問題がここにあります:
しかし残念なことに、OPは正解を返さない。
これはCAST()
関数のバグですか、それとも設計によるものですか?
SIGNED [INTEGER]
がセクションで言うのですか結果のタイプは次の値のいずれかになります。あるSIGNED INTEGER
のコンテキストでCAST
はない実際には32ビットの整数?
SELECT 1+1
ましたBIGINT
。実際、それは期待どおりに動作します。つまり、結果は。しかし、それはまだ、なぜ離れて説明していないCAST()
ドキュメントに振る舞う反するが、(私はそれを理解)と生産BIGINT
へのキャストに尋ねても、SIGNED INTEGER
またはUNSIGNED INTEGER
単一のスカラー値に。