0

我有一个类型Users为一列的表格。我可以在其中插入一个句点:userVARCHAR(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 创建的数据库有问题:

桌子

4

1 回答 1

0

您的专栏当前的问题VARCHAR是您使用的整理类型,armscii8_general_ci它转换了一些存储的字符,例如逗号和点。

请参见此处的示例。

也许您打算使用utf8_general_ciwhich 会产生您想要的结果:

请参见此处的示例。


不要使用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')

现场演示。

于 2014-10-08T22:32:09.827 回答