我有一个存储邮政/邮政编码列表的表格:
CREATE TABLE IF NOT EXISTS `postal_codes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`codes` text NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `codes` (`codes`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
INSERT INTO `postal_codes` (`id`, `codes`) VALUES
(1, '30301\r\n30302\r\n30303'),
(2, '90001\r\n90002\r\n90003\r\n90004\r\n90005');
我需要检查某行是否包含某个邮政/邮政编码。但是,它不起作用。例如,此查询返回ID为2的行,尽管'代码'专栏不包含' dfgdfgdfgdf'。那是为什么?
SELECT *
FROM postal_codes
WHERE MATCH(codes) AGAINST('+dfgdfgdfgdf' IN BOOLEAN MODE) AND id='2'
答案 0 :(得分:1)
FULLTEXT
因在小桌子上奇怪地工作而臭名昭着。您可以尝试使用几千行非重复性测试数据填充邮政编码表,然后再放弃它。
(我假设您已经考虑过对邮政编码表中的数据进行规范化,因此每个邮政编码只有一行。这是处理数字类型的一种更强大的方法 - 您正在尝试进行令牌搜索。)