我试图将数据从一个表插入到另一个表中,每个表都有一个“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 |
1条答案
按热度按时间5gfr0r5j1#
问题
id
值太高。MySQL
发生溢出时将返回限制值。查询1:
结果:
问题2:
结果:
我建议你,实现
id
在你的例子中是函数而不是使用CONV
功能。编辑
我将使用一个变量来生成新的行号并插入到
old
table。查询1:
结果: