Bug #83950 LOAD DATA INFILE fails with an escape character followed by a multi-byte one
| Submitted: | 24 Nov 2016 10:58 | Modified: | 27 Jan 2017 16:15 |
|---|---|---|---|
| Reporter: | Valeriy Kravchuk | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Charsets | Severity: | S3 (Non-critical) |
| Version: | 5.7.16, 8.0.0, 5.6.34 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | charset, LOAD DATA | ||
[24 Nov 2016 10:58]
Valeriy Kravchuk
[24 Nov 2016 11:58]
MySQL Verification Team
Hello Valerii, Thank you for the report and test case. Verified as described. Thanks, Umesh
[24 Nov 2016 12:03]
MySQL Verification Team
-- 5.6.34 - affected
[umshastr@hod03]/export/umesh/server/binaries/GABuilds/mysql-5.6.34: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.34-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost [(none)]> use test
Database changed
root@localhost [test]> LOAD DATA INFILE '/tmp/test.txt' INTO TABLE t1 CHARACTER SET utf8;
ERROR 1300 (HY000): Invalid utf8 character string: ''
root@localhost [test]> insert into t1 values('\ä');
Query OK, 1 row affected (0.00 sec)
root@localhost [test]> select * from t1;
+------+
| a |
+------+
| ä |
+------+
1 row in set (0.00 sec)
root@localhost [test]> \s
--------------
bin/mysql Ver 14.14 Distrib 5.6.34, for linux-glibc2.5 (x86_64) using EditLine wrapper
Connection id: 1
Current database: test
Current user: root@localhost
SSL: Not in use
Current pager: more
Using outfile: ''
Using delimiter: ;
Server version: 5.6.34-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql_ushastry.sock
Uptime: 31 sec
Threads: 1 Questions: 11 Slow queries: 0 Opens: 68 Flush tables: 1 Open tables: 61 Queries per second avg: 0.354
--------------
root@localhost [test]> show variables like 'sql_mode';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| sql_mode | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)
[2 Jan 2017 10:33]
Valeriy Kravchuk
It seems to be still repeatable with 5.7.17: openxs@ao756:~/dbs/5.7$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> \! cat /tmp/test.txt \ä mysql> DROP TABLE IF EXISTS t1; Query OK, 0 rows affected (0,18 sec) mysql> CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8); Query OK, 0 rows affected (0,30 sec) mysql> LOAD DATA LOCAL INFILE '/tmp/test.txt' INTO TABLE t1 CHARACTER SET utf8; ERROR 1300 (HY000): Invalid utf8 character string: ''
[2 Jan 2017 11:07]
Valeriy Kravchuk
Seems to be fixed in 5.5.54 though:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.54 |
+-----------+
1 row in set (0.00 sec)
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` varchar(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> \! cat /tmp/test.txt
\ä
mysql> LOAD DATA LOCAL INFILE '/tmp/test.txt' INTO TABLE t CHARACTER SET utf8;
Query OK, 1 row affected (0.06 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from t;
+------+
| a |
+------+
| ä |
+------+
1 row in set (0.00 sec)
[27 Jan 2017 16:15]
Paul DuBois
Posted by developer: Noted in 8.0.1 changelog. LOAD DATA failed to accept multibyte characters that followed an escape sequence.
[27 Jan 2017 16:32]
Jean-François Gagné
Thanks for fixing that in 8.0.1. Will that be fixed in 5.6 and 5.7 ? Thanks, JFG
[13 Jun 2017 5:53]
MySQL Verification Team
Re-verification on 5.7.18 as requested internally
Attachment: 83950_5.7.18.results (application/octet-stream, text), 3.11 KiB.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.041 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.