From e33e5727413543c74b3ede43ad437bb261c72839 Mon Sep 17 00:00:00 2001 From: Casey Peel Date: Mon, 8 Jul 2019 05:46:41 +0000 Subject: [PATCH] [ticket/16096] Use InnoDB fulltext limits for InnoDB tables The max and min search length for the MySQL database vary based on the engine for the underlying table. For MyISAM tables, the variables are ft_max_word_len and ft_min_word_len, but for InnoDB tables the variables are innodb_ft_max_token_size and innodb_ft_min_token_size. Take the posts table type into account when setting the max and min search length. PHPBB3-16096 --- phpBB/phpbb/search/fulltext_mysql.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/phpBB/phpbb/search/fulltext_mysql.php b/phpBB/phpbb/search/fulltext_mysql.php index 137ed7433d..1105d0892f 100644 --- a/phpBB/phpbb/search/fulltext_mysql.php +++ b/phpBB/phpbb/search/fulltext_mysql.php @@ -188,7 +188,7 @@ class fulltext_mysql extends \phpbb\search\base } $sql = 'SHOW VARIABLES - LIKE \'ft\_%\''; + LIKE \'%ft\_%\''; $result = $this->db->sql_query($sql); $mysql_info = array(); @@ -198,8 +198,16 @@ class fulltext_mysql extends \phpbb\search\base } $this->db->sql_freeresult($result); - $this->config->set('fulltext_mysql_max_word_len', $mysql_info['ft_max_word_len']); - $this->config->set('fulltext_mysql_min_word_len', $mysql_info['ft_min_word_len']); + if ($engine === 'MyISAM') + { + $this->config->set('fulltext_mysql_max_word_len', $mysql_info['ft_max_word_len']); + $this->config->set('fulltext_mysql_min_word_len', $mysql_info['ft_min_word_len']); + } + else if ($engine === 'InnoDB') + { + $this->config->set('fulltext_mysql_max_word_len', $mysql_info['innodb_ft_max_token_size']); + $this->config->set('fulltext_mysql_min_word_len', $mysql_info['innodb_ft_min_token_size']); + } return false; }