| 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.
