【问题标题】:MySQL Attempt to create temp table with big integers failsMySQL 尝试使用大整数创建临时表失败
【发布时间】:2016-04-30 03:13:50
【问题描述】:

我正在尝试创建一个临时表,将原始表中的 char(10) 数字 tkey 存储为无符号整数。 遇到第 109516 行时失败:

mysql> 如果不存在则创建临时表 lutemp AS (SELECT cast(tkey as unsigned),ca01,ce01 FROM lu); 错误 1264 (22003):第 109516 行的列 'cast(tkey as unsigned)' 的值超出范围

但是如果我选择该行作为整数,它没有问题:

mysql> select cast(tkey as unsigned) from lu limit 109515,1; +----------------------------+ | cast(tkey as unsigned) | +----------------------------+ | 4298001000 | +----------------------------+ 一组 1 行(0.10 秒)

我做错了什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    不要依赖数据库从CAST(... UNSIGNED) 给你一个BIGINT

    UNSIGNED INT 的最大值是

    4,294,967,295
    

    here。你的价值是

    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
    ;
    

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 2018-12-18
      • 1970-01-01
      • 2015-10-19
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多