我正在尝试创建一个临时表,将原始表中的 char(10) 数字 tkey 存储为一个无符号整数。 当它遇到第 109516 行时失败:
mysql> CREATE TEMPORARY TABLE IF NOT EXISTS lutemp AS (SELECT cast(tkey as unsigned),ca01,ce01 FROM lu); ERROR 1264 (22003): Out of range value for column 'cast(tkey as unsigned)' at row 109516
但是如果我选择该行作为整数,那么这样做没有问题:
mysql> select cast(tkey as unsigned) from lu limit 109515,1; +--------------------------+ | cast(tkey as unsigned) | +--------------------------+ | 4298001000 | +--------------------------+ 1 rows in set (0.10 sec)
我做错了什么?
最佳答案
不要依赖数据库从 CAST(... UNSIGNED)
给你一个 BIGINT
。
UNSIGNED INT 的最大值是
4,294,967,295
参见 here .你的值(value)是
4,298,001,000
尝试显式使用 BIGINT UNSIGNED
:
CREATE TEMPORARY TABLE IF NOT EXISTS lutemp
(SELECT tkey, ca01,ce01 FROM lu LIMIT 0);
ALTER TABLE lutemp MODIFY tkey BIGINT UNSIGNED;
INSERT INTO lutemp (tkey, ca01,ce01)
SELECT tkey, ca01,ce01 FROM lu
;
关于MySQL 尝试创建具有大整数的临时表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965024/