gpt4 book ai didi

mysql - 如何让 MySQL 的 "load data"正确地将非常大的整数导入 binary(16) 字段?

转载 作者:行者123 更新时间:2023-11-30 21:25:17 24 4
gpt4 key购买 nike

我有一个包含以非常大的整数表示的 ipv6 地址的文件。当我将其导入 mysql 时,数据是错误的。我需要做什么才能获取加载数据以将数据正确导入 binary(16) 列?

架构:

CREATE TABLE `ipv6_test` (
`ip` binary(16) NOT NULL,
`name` varchar(128) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

要导入的 CSV 文件,ipv6_test.csv:

"58569107296622255421594597096899477505","test"

MySQL导入命令:

mysql> load data local infile 'ipv6_test.csv' into table ipv6_test fields terminated by ',' enclosed by '"' lines terminated by '\n';

查询:

select ip, INET6_NTOA(ip), name from ipv6_test;

不正确的结果:

+------------------+-----------------------------------------+------+
| ip | INET6_NTOA(ip) | name |
+------------------+-----------------------------------------+------+
| 5856910729662225 | 3538:3536:3931:3037:3239:3636:3232:3235 | test |
+------------------+-----------------------------------------+------+

预期结果:

+------------------+-----------------------------------------+------+
| ip | INET6_NTOA(ip) | name |
+------------------+-----------------------------------------+------+
| ? binary data ? | 2C0F:FFF0:0000:0000:0000:0000:0000:0001 | test |
+------------------+-----------------------------------------+------+

最佳答案

INET6_NTOA() 获取原始二进制地址并将其转换为十六进制版本。您传递的是无效整数。

"58569107296622255421594597096899477505" 变为 0x353835363931303732393636... 作为原始十六进制,这就是那个奇怪值的来源。

我不确定 MySQL 是否可以操作 128 位数字并且也可以解决突然出现的端序问题。除了 NUMERIC 类型之外,它可以在内部处理的最大值似乎是 64 位。在写入 CSV 之前,您需要转换数据。

例如,如果你可以将它转换成文件中的样子:

0x2c0ffff0000000000000000000000001,test

然后您可以将其作为原始二进制值导入。

关于mysql - 如何让 MySQL 的 "load data"正确地将非常大的整数导入 binary(16) 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com