Bug #37114 sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE
| Submitted: | 31 May 2008 1:59 | Modified: | 15 Oct 2008 17:29 |
|---|---|---|---|
| Reporter: | Chris Calender | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: General | Severity: | S3 (Non-critical) |
| Version: | 5.0, 5.1, 6.0 | OS: | Any |
| Assigned to: | Tatiana Azundris Nuernberg | CPU Architecture: | Any |
| Tags: | LOAD DATA, LOAD DATA INFILE, NO_BACKSLASH_ESCAPES, sql mode, SQL_MODE | ||
[31 May 2008 1:59]
Chris Calender
[31 May 2008 2:01]
Chris Calender
Verified on 5.0.60 (and 5.0.50).
[31 May 2008 3:04]
Chris Calender
Also verified on 5.1.23-rc.
[31 May 2008 3:36]
Chris Calender
Verified on 5.0.62 and 6.0.4.
[3 Jun 2008 21:47]
Chris Calender
This bug also affects mysqlimport, as the NO_BACKSLASH_ESCAPES mode is ignored when using it also.
[4 Jun 2008 20:19]
Chris Calender
** Important Consideration / Question ** With this bug fixed, will it be possible to continue to use existing line terminators, such as \n, or will this require one to use a different line terminator, such as '|', or some other character that does not begin with '\'?
[10 Jun 2008 7:05]
Tatiana Azundris Nuernberg
sql_yacc.yy:
load_data:
load_data_lock opt_local INFILE TEXT_STRING_filesystem
{
LEX *lex=Lex;
lex->sql_command= SQLCOM_LOAD;
lex->lock_option= $1;
lex->local_file= $2;
lex->duplicates= DUP_ERROR;
lex->ignore= 0;
if (!(lex->exchange= new sql_exchange($4.str, 0)))
MYSQL_YYABORT;
}
sql_class.cc:
static String default_escaped("\\",default_charset_info);
sql_exchange::sql_exchange(char *name,bool flag)
:file_name(name), opt_enclosed(0), dumpfile(flag), skip_lines(0)
{
field_term= &default_field_term;
enclosed= line_start= &my_empty_string;
line_term= &default_line_term;
escaped= &default_escaped;
cs= NULL;
}
sql_load.cc:
int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
List<Item> &fields_vars, List<Item> &set_fields,
List<Item> &set_values,
enum enum_duplicates handle_duplicates, bool ignore,
bool read_file_from_client)
{
...
String ...,*escaped=ex->escaped;
So yeah, totally ignoring SQL_MODE.
If we heed SQL_MODE, we should do it as a (changed) default while parsing: mysql_load() has no way of telling whether an escape of \ in the parameters is a default that we'll have to fix if SQL_MODE is NO_BACKSLASH_ESCAPE, or whether the user explicitly used LOAD DATA ... ESCAPED BY '\\', which I believe should still override whatever default SQL_MODE suggests.
[11 Jun 2008 7:53]
Tatiana Azundris Nuernberg
Anyway, changing for both LOAD DATA and SELECT/OUTFILE passes all the existing INFILE/OUTFILE/NO_BACKSLASH_ESCAPE tests ( bootstrap ctype_big5 distinct loaddata outfile outfile_loaddata ps query_cache sp sp-error subselect union view character_set_database_func ctype_big5 distinct federated fulltext3 gis loaddata local_infile_basic local_infile_func mysqlbinlog mysqlbinlog_base64 outfile_loaddata ps_1general ps_ddl sp-error trigger variables view warnings mysql select sql_mode sql_mode_basic sql_mode_func system_mysql_db_fix50030 system_mysql_db_fix50117 ), but let's make sure we have definitely a correct OUTFILE/INFILE cycle with and without NO_BACKSLASH_ESCAPES before we attach the patch, shall we?
[13 Jun 2008 17:14]
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/47852 2661 Tatiana A. Nurnberg 2008-06-13 Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE NO_BACKSLASH_ESCAPES was not heeded in LOAD DATA INFILE and SELECT INTO OUTFILE. It is now.
[8 Sep 2008 13:05]
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/53527 2715 Tatiana A. Nurnberg 2008-09-08 Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE NO_BACKSLASH_ESCAPES was not heeded in LOAD DATA INFILE and SELECT INTO OUTFILE. It is now.
[17 Sep 2008 6: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/54235 2680 Tatiana A. Nurnberg 2008-09-17 Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE NO_BACKSLASH_ESCAPES was not heeded in LOAD DATA INFILE and SELECT INTO OUTFILE. It is now.
[18 Sep 2008 9:29]
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/54278 2682 Tatiana A. Nurnberg 2008-09-18 Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE tweaked test to make embedded server happy
[18 Sep 2008 11:25]
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/54285 2682 Tatiana A. Nurnberg 2008-09-18 Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with LOAD DATA INFILE tweaked test to make embedded server happy
[18 Sep 2008 13:32]
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/54301
[19 Sep 2008 16:31]
Tatiana Azundris Nuernberg
5.0.70, 5.1.30, 6.0.8
[9 Oct 2008 18:12]
Bugs System
Pushed into 5.1.30 (revid:azundris@mysql.com-20080918092450-v3hqnpgo8wb7v5oy) (version source revid:matthias.leich@sun.com-20080918130519-n5rkfl809hokgnp3) (pib:4)
[15 Oct 2008 15:04]
Paul DuBois
This is actually pushed to 5.1.29, not 5.1.30.
[15 Oct 2008 17:29]
Paul DuBois
Noted in 5.0.70, 5.1.29, 6.0.8 changelogs. The NO_BACKSLASH_ESCAPES SQL mode was ignored for LOAD DATA INFILE and SELECT INTO ... OUTFILE. The setting is taken into account now.
[17 Oct 2008 16:43]
Bugs System
Pushed into 6.0.8-alpha (revid:azundris@mysql.com-20080918092450-v3hqnpgo8wb7v5oy) (version source revid:matthias.leich@sun.com-20080918121317-gcwf7sntty3hw8lj) (pib:5)
[28 Oct 2008 21:03]
Bugs System
Pushed into 5.1.29-ndb-6.2.17 (revid:azundris@mysql.com-20080918092450-v3hqnpgo8wb7v5oy) (version source revid:tomas.ulin@sun.com-20081028140209-u4emkk1xphi5tkfb) (pib:5)
[28 Oct 2008 22:21]
Bugs System
Pushed into 5.1.29-ndb-6.3.19 (revid:azundris@mysql.com-20080918092450-v3hqnpgo8wb7v5oy) (version source revid:tomas.ulin@sun.com-20081028194045-0353yg8cvd2c7dd1) (pib:5)
[1 Nov 2008 9:47]
Bugs System
Pushed into 5.1.29-ndb-6.4.0 (revid:azundris@mysql.com-20080918092450-v3hqnpgo8wb7v5oy) (version source revid:jonas@mysql.com-20081101082305-qx5a1bj0z7i8ueys) (pib:5)
[24 Apr 2020 4:23]
Robert Simpson
Does this fix also work for LOAD DATA LOCAL INFILE (from a LOCAL file)? Even with NO_BACKSLASH_ESCAPES, we have backslashes in Active Directory domain accounts which don't get loaded into the tables.
[24 Apr 2020 14:53]
Robert Simpson
For anyone else running across this issue searching for an answer when either no rows or only one row is getting loaded... Because characters preceded by a backslash are no longer treated as special characters, you have to change "LINES TERMINATED BY '\r\n'" to "LINES TERMINATED BY X'0d0a'". Otherwise, the input file is treated as a single line and, if you are skipping a header row, no rows get loaded!
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.084 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.