[英]mysql uses "." as a value separator in match(ip_list) against(string), with "," 'string' also present
在处理ip个地址,比较时,出错了,从数据库中查到几乎所有的数据。 询问:
SELECT * FROM superbans WHERE NOT uuid=? AND (MATCH(ip_list) AGAINST(?) OR MATCH(clientId_list) AGAINST(?) OR MATCH(deviceId_list) AGAINST(?) OR MATCH(xuid_list) AGAINST(?))
示例 uuid: e778e3d4-7866-3601-b069-d38dd1ed2e21
示例 ip: 111.111.111.111
示例 clientId: 4848256256931583384 (but clientId maybe contains "-": -4848256256931583384)
示例 deviceId: 4a474f8b-3032-35fb-bd27-fb4e3c5435fd
示例 xuid: 2535454407347849
如果我从查询中删除 MATCH(ip_list) AGAINST(?) ,它会正确输出数据。 请帮助我使 mysql 不认为是“.” 这是分隔符。
重要提示:与“.”一致也有 ”,”
我试图通过REGEXP来做,因为我刚开始学习mysql,然后我没有成功:(
是的。 作为定界符处理(逗号、空格和许多其他字符也是如此)。 要匹配准确的 IP 地址,请在每个值两边加上双引号。 否则,您将获得与 111 匹配的任何结果(在您的示例 IP 中)。
这是一个示例,用于演示带和不带双引号的结果:
select * from country where countryname='United States';
+-------------+---------------+
| countrycode | countryname |
+-------------+---------------+
| USA | United States |
+-------------+---------------+
SELECT * FROM country WHERE MATCH(countryname) AGAINST('United States');
+-------------+--------------------------------------+
| countrycode | countryname |
+-------------+--------------------------------------+
| UMI | United States Minor Outlying Islands |
| USA | United States |
| FSM | Micronesia, Federated States of |
| ARE | United Arab Emirates |
| GBR | United Kingdom |
+-------------+--------------------------------------+
SELECT * FROM country WHERE MATCH(countryname) AGAINST('United.States');
+-------------+--------------------------------------+
| countrycode | countryname |
+-------------+--------------------------------------+
| UMI | United States Minor Outlying Islands |
| USA | United States |
| FSM | Micronesia, Federated States of |
| ARE | United Arab Emirates |
| GBR | United Kingdom |
+-------------+--------------------------------------+
SELECT * FROM country WHERE MATCH(countryname) AGAINST('"United States"');
+-------------+--------------------------------------+
| countrycode | countryname |
+-------------+--------------------------------------+
| UMI | United States Minor Outlying Islands |
| USA | United States |
+-------------+--------------------------------------+
SELECT * FROM country WHERE MATCH(countryname) AGAINST('"United States","United Kingdom"');
+-------------+--------------------------------------+
| countrycode | countryname |
+-------------+--------------------------------------+
| GBR | United Kingdom |
| UMI | United States Minor Outlying Islands |
| USA | United States |
+-------------+--------------------------------------+
但请注意,如果您这样做,您并没有利用全文搜索的强大功能。 是否要匹配部分 IP 地址? 如果没有,您可以像这个例子一样使用 IN 语句:
select * from country where countryname in ('United States', 'United Kingdom');
+-------------+----------------+
| countrycode | countryname |
+-------------+----------------+
| GBR | United Kingdom |
| USA | United States |
+-------------+----------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.