将十六进制数据从varchar类型字段移动到bigint类型(mysql)

vecaoik1  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(359)

我试图将数据从一个表插入到另一个表中,每个表都有一个“id”字段,该字段应该相同,但存储的数据类型不同。这个“id”字段应该表示相同的唯一值,允许我从一个更新到另一个。
在一个表(new.table one)中,“id”存储为数据类型 varchar(35) 在old.table中,它是数据类型 bigint(20) --我相信这个旧表表示存储在新表中的十六进制值的整数版本。我正在尝试将数据从new.table更新回old.table
在搜索了一段时间之后
当我尝试这个简单的mysql更新查询时,它失败了:

INSERT INTO old.table (id, field2)
    SELECT CAST(CONV(id,16,10) AS UNSIGNED INTEGER), field2
FROM new.table;

它失败并出现以下错误:

Out of range value for column 'id' at row 1

我也试过一个简单的方法 SELECT CAST(CONV(id, 16,10) AS UNSIGNED INTEGER) from new.table; 结果大部分都是相同的整数,但new.table中的每个十六进制值都是唯一的。我在谷歌上搜索了两天,真的可以用来帮助找出问题所在。谢谢。
编辑:从new.table输出select id的控制台中的一些示例数据: | 1d2353560110956e1b3e8610a35d903a | | ec526762556c4f92a3ea4584a7cebfe1.11 | | 34b8c838c18a4c5690514782b7137468.16 | | 1233fa2813af44ca9f25bb8cac05b5b5.16 | | 37f396d9c6e04313b153a34ab1e80304.16 |

5gfr0r5j

5gfr0r5j1#

问题 id 值太高。 MySQL 发生溢出时将返回限制值。
查询1:

select CONV('FFFFFFFFFFFFFFFF1',16,10)

结果:

| CONV('FFFFFFFFFFFFFFFF1',16,10) |
|---------------------------------|
|            18446744073709551615 |

问题2:

select CONV('FFFFFFFFFFFFFFFF',16,10)

结果:

| CONV('FFFFFFFFFFFFFFFF',16,10) |
|--------------------------------|
|           18446744073709551615 |

我建议你,实现 id 在你的例子中是函数而不是使用 CONV 功能。
编辑
我将使用一个变量来生成新的行号并插入到 old table。

CREATE TABLE new(
   Id varchar(35)
);

insert into new values ('1d2353560110956e1b3e8610a35d903a');
insert into new values ('ec526762556c4f92a3ea4584a7cebfe1.11');
insert into new values ('34b8c838c18a4c5690514782b7137468.16');
insert into new values ('1233fa2813af44ca9f25bb8cac05b5b5.16');
insert into new values ('37f396d9c6e04313b153a34ab1e80304.16');

CREATE TABLE old(
   Id bigint(20),
   val varchar(35)
);

INSERT INTO old (id, val)
    SELECT rn, id
FROM (
  SELECT *,(@Rn:=@Rn +1) rn
  FROM new CROSS JOIN (SELECT @Rn:=0) v 
) t1

查询1:

SELECT * FROM old

结果:

| Id |                                 val |
|----|-------------------------------------|
|  1 |    1d2353560110956e1b3e8610a35d903a |
|  2 | ec526762556c4f92a3ea4584a7cebfe1.11 |
|  3 | 34b8c838c18a4c5690514782b7137468.16 |
|  4 | 1233fa2813af44ca9f25bb8cac05b5b5.16 |
|  5 | 37f396d9c6e04313b153a34ab1e80304.16 |

相关问题