| Bug #8351 | Double quote in Boolean Fulltext query causes crash | ||
|---|---|---|---|
| Submitted: | 7 Feb 2005 4:32 | Modified: | 9 Mar 2005 19:55 |
| Reporter: | Wade Maxfield | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S1 (Critical) |
| Version: | 4.1.9 | OS: | MacOS (Mac OS X 10.3.7) |
| Assigned to: | Sergey Vojtovich | CPU Architecture: | Any |
[8 Feb 2005 2:26]
Jorge del Conde
root# uname -a
Darwin mac.local 7.7.0 Darwin Kernel Version 7.7.0
mysql> CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body TEXT,FULLTEXT (title,body));
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT COUNT(*) as count FROM articles WHERE match(title,body) against ('"this exact search string"' IN BOOLEAN
-> MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> select version();
+----------------+
| version() |
+----------------+
| 4.1.9-standard |
+----------------+
[8 Feb 2005 7:14]
Wade Maxfield
Done more testing and it appears to be related to a collation being set to utf8_unicode_ci on a per column basis, and it only dies if any matches are found. If no rows match, it doesn't die. I use Navicat (OS X), and during a session it has added CHARACTER SET and COLLATE to each of my column definitions, as in the CREATE TABLE below.
mysql> CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL
-> PRIMARY KEY,title VARCHAR(200) character set utf8 collate utf8_unicode_ci,
-> body TEXT character set utf8 collate utf8_unicode_ci,
-> FULLTEXT (title,body));
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT COUNT(*) as count FROM articles WHERE
-> MATCH(title,body) AGAINST ('"bob dyl"' IN BOOLEAN MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) as count FROM articles WHERE
-> MATCH(title,body) AGAINST ('"bob dylan"' IN BOOLEAN MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> insert into `articles` values('1','bob dylan','highway 61'),
-> ('2','dylan, bob','Best of');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT COUNT(*) as count FROM articles WHERE
-> MATCH(title,body) AGAINST ('"bob dyl"' IN BOOLEAN MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) as count FROM articles WHERE
-> MATCH(title,body) AGAINST ('"bob dylan"' IN BOOLEAN MODE);
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>
[8 Feb 2005 16:11]
Jorge del Conde
Thanks for your bug report. I was able to reproduce this bug.
[14 Feb 2005 21:04]
Sergei Golubchik
Fixed in 4.1.11
[4 Mar 2005 12:09]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/22656
[6 Mar 2005 20:16]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/22703
[7 Mar 2005 12:47]
Sergey Vojtovich
Fixed in 5.0.3
[9 Mar 2005 19:55]
Paul DuBois
Noted change in phrase searching behavior in the boolean full-text section of the manual. Noted bugfix in 4.1.11, 5.0.3 changelog. Noted behavior change in 5.0.3 changelog.

Description: Doing a Boolean Fulltext query using a double quote (for a literal string match) causes mysqld to die and respawn. SELECT COUNT(*) as count FROM table WHERE match (field1,field2) against ('"this exact search string"' IN BOOLEAN MODE); The error message in mysql cli: mysql> SELECT COUNT(*) as count FROM table WHERE match (field1,field2) against ('"this exact search string"' IN BOOLEAN MODE); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: theDatabase ERROR 2013 (HY000): Lost connection to MySQL server during query mysql> The exact version is Ver 4.1.9-standard for apple-darwin7.7.0 on powerpc (Official MySQL-standard binary) How to repeat: SELECT COUNT(*) as count FROM table WHERE match (field1,field2) against ('"this exact search string"' IN BOOLEAN MODE); will cause it to die everytime.