我该如何正确存储和检索IP?

时间:2014-10-08 21:45:53

标签: mysql-5.5

我的表格 Users ,其中一列 user 类型为 VARCHAR(15) 。我可以插入一段时间:

INSERT INTO `LJ`.`Users` (`user`) VALUES ('.')

现在我想搜索这段时间:

SELECT * FROM `Users` WHERE `user` LIKE '.'

SELECT * FROM `Users` WHERE `user` = '.'

在这两种情况下,都找不到现有条目:

  

MySQL返回一个空结果集(即零行)。 (查询耗时0.0001秒)

逗号的问题相同。

实际上,我打算存储像125.50.75.80这样的IP地址,但我把问题归结为无法搜索标点符号。我试过了 '\。'也无济于事。

这是文字的问题;如何处理变量,包含带句点的字符串?

更新:我已在使用表格

在命令行中创建的数据库中进行了测试
CREATE TABLE LJ.Users ( user VARCHAR(15) );

一切正常。我怀疑用phpMyAdmin创建的数据库出了问题:

table

1 个答案:

答案 0 :(得分:0)

VARCHAR列的当前问题是您使用armscii8_general_ci的整理类型,它会转换一些存储的字符,例如逗号和点。 < / p>

See example here.

也许你打算使用utf8_general_ci来产生你想要的结果:

See example here.


请勿使用VARCHAR存储IPv4,使用INT unsigned然后您可以使用INET_ATON()INET_NTOA()函数返回/插入/比较IPv4。

CREATE TABLE users
(
    user_ip INT unsigned
);

然后插入您将使用的IPv4:

INSERT INTO users (user_ip) VALUES (INET_ATON('125.50.75.80'));

然后你可以这样读:

SELECT INET_NTOA(user_ip) FROM users WHERE user_ip = INET_ATON('125.50.75.80')

Live DEMO.