| Bug #20103 | Escaping with backslash does not work | ||
|---|---|---|---|
| Submitted: | 27 May 2006 9:50 | Modified: | 9 Aug 2006 20:08 |
| Reporter: | Hakan Küçükyılmaz | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Command-line Clients | Severity: | S3 (Non-critical) |
| Version: | 5.0.23-BK | OS: | Linux (SuSE 10.0) |
| Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[27 May 2006 9:50]
Hakan Küçükyılmaz
[27 May 2006 10:19]
Valeriy Kravchuk
On the same manual page (http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html) there is a clear explanation: "Note: Because MySQL uses C escape syntax in strings (for example, ‘\n’ to represent a newline character), you must double any ‘\’ that you use in LIKE strings. For example, to search for ‘\n’, specify it as ‘\\n’. " Same applies to ESCAPE clause: mysql> SELECT 'David_' LIKE 'David\_' ESCAPE '\\'; +-------------------------------------+ | 'David_' LIKE 'David\_' ESCAPE '\\' | +-------------------------------------+ | 1 | +-------------------------------------+ 1 row in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.0.23 | +-----------+ 1 row in set (0.00 sec) It is intended behaviour in MySQL, I believe.
[27 May 2006 10:23]
Hakan Küçükyılmaz
Sorry, I just tried with ESCAPE '\\', too.
[12:21] root@test>SELECT 'Andrey_' LIKE 'Andrey\_' ESCAPE '\\';
+---------------------------------------+
| 'Andrey_' LIKE 'Andrey\_' ESCAPE '\\' |
+---------------------------------------+
| 1 |
+---------------------------------------+
1 row in set (0.00 sec)
But with NO_BACKSLASH_ESCAPE it does not work:
[12:21] root@test>set sql_mode='NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)
5.0.23-debug
[12:23] root@test>SELECT 'Andrey_' LIKE 'Andrey\_' ESCAPE '\';
'> ';
+--------------------------------------+
| 'Andrey_' LIKE 'Andrey\_' ESCAPE '\' |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.00 sec)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1
[12:23] root@test>SELECT 'Andrey_' LIKE 'Andrey\_' ESCAPE '\\';
ERROR 1210 (HY000): Incorrect arguments to ESCAPE
It looks like that the single quote does not get closed properly.
[27 May 2006 11:23]
Valeriy Kravchuk
The (verified) fact that there is no way to use \ as ESCAPE character after set sql_mode='NO_BACKSLASH_ESCAPES'; is either a bug or (more likely) a request for a more detailed documentation. Thank you for persistence.
[27 May 2006 16:52]
Paul DuBois
According to the manual, NO_BACKSLASH_ESCAPES
is supposed to make backslash an ordinary character
like any other character. Looks to me like it doesn't
work:
mysql> set sql_mode = 'NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.24 sec)
mysql> select '\';
'>
Note how the prompt changes, indicating that \ has been
taken as an escape character before the ' character. But
perhaps this problem occurs only in certain contexts. The
following appears to be correct:
mysql> set sql_mode = '';
Query OK, 0 rows affected (0.12 sec)
mysql> select '\\', '\t';
+---+---+
| \ | |
+---+---+
| \ | |
+---+---+
1 row in set (0.00 sec)
mysql> set sql_mode = 'NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)
mysql> select '\\', '\t';
+----+----+
| \\ | \t |
+----+----+
| \\ | \t |
+----+----+
1 row in set (0.00 sec)
Maybe the problem is limited to backslash before
' or " characters.
[20 Jun 2006 15:43]
Sergei Golubchik
There're two different bugs here.
1.
[12:23] root@test>SELECT 'Andrey_' LIKE 'Andrey\_' ESCAPE '\\';
ERROR 1210 (HY000): Incorrect arguments to ESCAPE
ESCAPE argument is not un-escaped by the server.
This is a server bug.
2. [12:23] root@test>SELECT 'Andrey_' LIKE 'Andrey\_' ESCAPE '\';
'>
A client still treats backslash as the escape character in NO_BACKSLASH_ESCAPE mode.
This is a bug in mysql command line client.
[28 Jul 2006 7:38]
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/commits/9695
[28 Jul 2006 18:13]
Jim Winstead
It appears to me that the patch breaks handling of escaped quote characters in the mysql client.
[29 Jul 2006 6:22]
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/commits/9755 ChangeSet@1.2222, 2006-07-29 09:21:29+03:00, gkodinov@macbook.mshome.net +4 -0 Bug #20103: Escaping with backslash does not work - implement the --no-backslash-escapes option to disable the special meaning of backslash at the client side. This is needed to complement the server-side no_backslash_escapes sql mode.
[1 Aug 2006 8:06]
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/commits/9877 ChangeSet@1.2222, 2006-08-01 11:05:54+03:00, gkodinov@macbook.gmz +3 -0 Bug #20103: Escaping with backslash does not work - make the client to respect the server-side no_backslash_escapes option and disable the special meaning of backslash also at client side.
[2 Aug 2006 19:05]
Evgeny Potemkin
Fixed in 5.0.25, 5.1.12
[9 Aug 2006 20:08]
Paul DuBois
Noted in 5.0.25, 5.1.12 changelogs.
[16 Nov 2007 19:21]
greg perry
Hello,
I am running 5.0.27 and have found and I believe a similiar issue in the insert clause (through the Heidi client interface)
INSERT INTO `File`( FileName, Path, Size, Creation, Modified, LastAccess, CheckSum, Attributes) VALUES ('The House of Sand and Fog CD1.avi','e:\\',734916608,'2005-05-13 13:59:00','2005-05-13 13:59:00','',0,1)
returns an error but when i change 'e:\\' to 'e:\\ ' the insert completes - I believe this is a server bug. Please correct me if I'm wrong, I hope it helps.
Regards,
Greg.
