MySQL 尝试创建具有大整数的临时表失败

标签 mysql

我正在尝试创建一个临时表,将原始表中的 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/

相关文章:

java - 防止用户编辑同一条记录

java - 更新 hibernate 中的查询

php - 使用外部数据库在本地测试 PHP

php - 从数据库中删除 ID

mysql - 如何在mysql中按ASC排序,但在最后对null进行排序?

使用组合 xy 或 yx 的 MySQL 更新查询

php - 自动获取 : name_of_table. name_of_row 形式的列名称

mysql - 配方数据库,按成分搜索

mysql - 如何查看更新查询已更改的所有值?在mysql中

mysql - 在客户端测试服务器故障转移时如何正确使用loadBalanceBlacklistTimeout