文字列を取得してテーブルを作成する場合(これは strictモード で失敗します)、
_CREATE TABLE g
AS SELECT CAST('2147483699' AS int);
_
Bigint型が必要であることをどのように伝えることができますか? int(10)
タイプも取得します。 SELECT
ingそれからも滑稽です、
_+---------------------------+
| CAST('2147483699' AS int) |
+---------------------------+
| 2147483647 |
+---------------------------+
_
データは実際には間違っており、静かに失敗しました。 このデータベースのデフォルトが非常に悪いことは既知の問題です ですが、bigintとしてテーブルを作成するにはどうすればよいですか?
_CREATE TABLE g
AS SELECT CAST('2147483699' AS bigint);
_
このエラーが発生するようにすると、
エラー1064(42000):SQL構文にエラーがあります。 MariaDBサーバーのバージョンに対応するマニュアルで、2行目で「bigint)の近くで使用する正しい構文を確認してください
整数をbigintにキャストするにはどうすればよいですか?
PostgreSQLでは、それは非常に簡単です。 int
にキャストした場合に例外をスローすることに加えて、bigint
にキャストして
_SELECT CAST('2147483699' AS bigint);
int8
------------
2147483699
_
静かに?やってみましょう:
CREATE TABLE g
AS SELECT CAST('2147483699' AS int);
クエリは正常、1行が影響を受けた、1警告(0.19秒)レコード:1重複:0警告:1
そして警告は:
|警告| 1264 |行1の列 'CAST(' 2147483699 'AS int)'の範囲外の値|
はい、テーブルから選択することは興味深いですが、警告が出されても驚くことではありません。
(現時点では、MariaDB 10.2インスタンスはありませんが、dbfiddle.ukでテストすると、やはりサイレントではありませんが、失敗することが示されています。)
警告はありません。
*からgを選択してください;
与える:
+---------------------------+
| CAST('2147483699' AS int) |
+---------------------------+
| 2147483699 |
+---------------------------+
1 row in set (0.000 sec)
そして、列は実際にbigint(10)として作成されます。
エラー1064(42000):SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、2行目付近の「int)」付近で使用する正しい構文を確認してください
コンピュータはノーと言う。
MariaDBまたはMySQLはbigintとしてキャストできますか?見てきたように、そうです、MariaDB 10.3は可能です(ただし、GAはまだですが...確かに、いつの日かそうなるでしょう)。ただし、暗黙的にbigintとしてのみキャストできます。 varchar(しかし MDEV-1128 を参照)、text、float、tinyintなどにキャストできないのと同じように、bigintとして明示的にキャストしないでください。キャストできるデータ型の数は限られていますこれは十分に文書化されていませんが、CASTは CONVERT関数 にリストされているのと同じデータ型のみをサポートしているようです。
MySQL(少なくとも5.6+)とMariaDB(少なくとも10.2+)の両方で機能し、キャストの必要性を回避する方法:
CREATE TABLE g (b bigint)
AS
SELECT 2147483699 AS b -- no CAST needed
UNION ALL
SELECT '2147483699' ;
テスト:
文字列を数値に変換して算術演算を実行してから、無害な算術演算を実行してみてください。
SELECT '2147483699'+0;
+----------------+
| '2147483699'+0 |
+----------------+
| 2147483699 |
+----------------+