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

时间:2018-10-01 22:26:52

标签: mysql sql

我正在尝试将数据从一个表插入另一个表,每个表都有一个“ id”字段,该字段应该相同,但存储的数据类型不同。此“ id”字段应代表相同的唯一值,允许我从一个更新到另一个。

在一个表(新表)中,“ 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中的每个十六进制值都是唯一的。我已经在Google上搜索了两天,它确实可以帮助您找出问题所在。谢谢。

编辑:来自new.table的SELECT ID输出的控制台中的一些示例数据:

| 1d2353560110956e1b3e8610a35d903a | | ec526762556c4f92a3ea4584a7cebfe1.11 | | 34b8c838c18a4c5690514782b7137468.16 | | 1233fa2813af44ca9f25bb8cac05b5b5.16 | | 37f396d9c6e04313b153a34ab1e80304.16 |

1 个答案:

答案 0 :(得分:0)

问题id的值太高。

MySQL将在发生溢出时返回极限值。

查询1

select CONV('FFFFFFFFFFFFFFFF1',16,10)

Results

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

查询2

select CONV('FFFFFFFFFFFFFFFF',16,10)

Results

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

我建议您在函数中为id实现逻辑算法,而不要使用CONV函数。

编辑

我将使用变量创建新的行号并插入到old表中。

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

Results

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