MySQL与0结果中的0匹配,但在InnoDB上工作



我有这个表

创建表`tbl'(  `id` bigint(20)不是零,  `code` varchar(64)整理UTF8MB4_UNICODE_CI默认为null)发动机= myisam默认charset = utf8mb4 colate = utf8mb4_unicode_ci;alter表`tbl`添加主键(`iD`);alter表`tbl`添加fullText键`code`(code');插入`tbl`(`iD`,`code`)值(1,'110.103');

这是我的查询

从" tbl"中选择代码(' 110.103 *'在布尔模式下))

但是没有结果。有什么想法吗?

首先,完整文本索引存储单词。单词分开,例如到一个时期 - 实际上,任何不是字母,数字,下划线或单个撇号的东西。因此,您的文字目前由两个单词组成:" 101"one_answers" 103"。

MySQL FullText索引只能存储具有最小单词长度的单词。Myisam使用4用作ft_min_word_len的默认值,因此不包括3位"单词",而InnoDB则将3用于innodb_ft_min_token_size,这就是其中包括的原因。更改这些设置(并重建索引),并且两个引擎都会找到相同的行。

说:MATCH (code) AGAINST ('110.103*' IN BOOLEAN MODE)仍将搜索单词。它将找到任何包含" word" 110或(!)单词以 103开头的行。您可以强制使用('+110 +103*' IN BOOLEAN MODE)的两个单词,但是它们可以按任何顺序进行。如果使用against('"110 103"'),则可以执行特定订单,但是"不再支持*

一个常见的技巧是用下划线110_103存储您的数字(并以这种方式搜索),然后这是一个完整的单词。您可以例如通过添加code_search-Column,您可以使用触发器保持最新(或将其定义为生成的列),然后在该列中进行搜索。如果您的代码也可以包含_,则不再区分_.,因此您必须添加其他条件(... where match (code_search) against (...) and code like '...')或类似条件)。

但是我不确定您是否真的需要在此处进行全文搜索。如果您的列实际上只包含一个代码(而不是单个单词单词的文本,这是完整文本索引的用例),则您可能需要尝试where code like '101.103%'where code like '%101.103%'where code like '101.103%' or code like '% 101.103%',根据您的目的确切的目的。为此添加code的(正常)索引,至少第一次搜索将比FullText搜索快(除了将其与FullText搜索相比,它将为您提供重新汇总的结果,除了它将相比之下)。

,尽管我怀疑这里是这样的:如果您实际上正在寻找浮点号,但如果您可以将它们作为实际数字存储在单独的列中(或单独的表格,则可以使您的生活变得更加容易数据包含每排的一个以上的浮点数)。

尝试:'" 110.103"*'否则它忽略了"周期"。

mySQL不允许整数或double value .。

相关内容

  • 没有找到相关文章

最新更新