gpt4 book ai didi

MySQL 截断了不正确的 DOUBLE 值?

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

我在 MySQL 中有一个 GeoIP 表。IP 范围使用 BINARY(16) 定义。当我使用查询查找 IP 地址时:

SELECT `countries_countryID` FROM `geoIP` WHERE INET_ATON("84.224.199.84") BETWEEN `geoIP`.`ipFrom` AND `geoIP`.`ipTo` LIMIT 1;

我收到警告消息 (20-30000),内容为:“截断了不正确的 DOUBLE 值:'17498112\x00\x00\x00\x00\x00\x00\x00\x00'”

表格:

DROP TABLE IF EXISTS `geoIP` ;

CREATE TABLE IF NOT EXISTS `geoIP` (
`geoIPID` INT NOT NULL AUTO_INCREMENT ,
`IPFrom` BINARY(16) NOT NULL ,
`IPTo` BINARY(16) NOT NULL ,
`countries_countryID` INT NOT NULL ,
PRIMARY KEY (`geoIPID`) ,
INDEX `fk_geoIP_countries1_idx` (`countries_countryID` ASC) ,
INDEX `IPTo_INDEX` (`IPTo` ASC) ,
INDEX `IPFrom_INDEX` (`IPFrom` ASC) ,
CONSTRAINT `fk_geoIP_countries1`
FOREIGN KEY (`countries_countryID` )
REFERENCES `countries` (`countryID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

结果正确,国家代码返回正确,但有这些警告消息。怎么了?

最佳答案

如果要将 IPv6 和 IPv4 存储在同一字段中,则应在表定义中使用 VARBINARY(16),而不是 BINARY(16)。这将删除警告。

在 MySQL 中,BINARY 字段(很像 CHAR 字段)是固定宽度并右填充的。您可以在警告中看到填充。比较是在 DOUBLE(IP)和 BINARY(16) 的 1/2(右半部分被截断)之间进行的。这就是您收到警告的原因。

http://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html

关于MySQL 截断了不正确的 DOUBLE 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034845/

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