MySQL не вставляет обратную косую черту - программирование
Подтвердить что ты не робот

MySQL не вставляет обратную косую черту

В MySQL, когда я пытаюсь вставить обратную косую черту в свою таблицу, она не принимает ее и дает мне контент без обратного слэша.

id установлено значение auto increment:

Код:

INSERT INTO gender (sex, date) VALUES (
'male are allowed \ female are not allowed', "2012-10-06")

Как вставить буквальную обратную косую черту?

Примечания о escape-последовательностях:

Escape  Sequence    Character Represented by Sequence

\0     An ASCII NUL (0x00) character.
\'     A single quote ("'") character.
\"     A double quote (""") character.
\b     A backspace character.
\n     A newline (linefeed) character.
\r     A carriage return character.
\t     A tab character.
\Z     ASCII 26 (Control+Z). See note following the table.
\\     A backslash ("\") character.
\%     A "%" character. See note following the table.
\_     A "_" character. See note following the table.
4b9b3361

Ответ 2

Как приручить обратную косую черту в инструменте загрузки данных mysql load:

Шаг 1, создайте таблицу:

mysql> create table penguin (id int primary key, chucknorris VARCHAR(4000));
Query OK, 0 rows affected (0.01 sec)

Шаг 2, создайте свой файл для импорта и поместите туда эти данные.

1   aliens are on route
2   scramble the nimitz\
3   \its species 8472
4   \\\\\\\\\\\\\\\\\\
5   Bonus characters:[email protected]#$%^&*()_+=-[]\|}{;'":/.?>,< anything but tab

Шаг 3, вставьте в таблицу:

mysql> load data local infile '/home/el/foo/textfile.txt' into table penguin 
       fields terminated by '\t' lines terminated by '\n' 
       (@col1, @col2) set [email protected], [email protected];
Query OK, 4 rows affected, 1 warning (0.00 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 1

Шаг 4, и, конечно же, он вызывает этот странный вывод:

mysql> select * from penguin;
+----+-----------------------------------------------------------------+
| id | chucknorris                                                     |
+----+-----------------------------------------------------------------+
|  1 | aliens are on route                                             |
|  2 | scramble the nimitz                                             |
|  3 |                                                                 |
|  4 | \\\\\\\\\                                                       |
|  5 | Bonus characters:[email protected]#$%^&*()_+=-[]|}{;'":/.?>,< anything but tab |
+----+-----------------------------------------------------------------+

Шаг 5, проанализируйте предупреждение:

mysql> show warnings;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+------------------------------------- ------------------+
| Warning | 1262 | Row 2 was truncated; it contained more data than there |
|         |      | were input columns                                     |
+---------+------+--------------------------------------------------------+
1 row in set (0.00 sec)

Шаг 6, подумайте о том, что пошло не так:

Обратная косая черта слева от nimitz заставила анализатор данных загрузки mysql конкатенировать конец строки 2 с началом строки 3. Затем он набросился на вкладку и поставил "скремблировать nimitz\n3 в строку 2.

Остальная часть строки пропущена, поскольку дополнительные слова its species 8472 не подходят нигде, она выдает предупреждение, которое вы видите выше.

В строке 4 было 18 обратных косых черт, поэтому нет проблем и появляется как 9 backslahes, потому что каждый из них сбежал. Если бы было нечетное число, ошибка в строке 2 произошла бы со строкой 4.

Бонусные символы в строке 5 прошли нормально. Все разрешено кроме вкладки.

Шаг 7, reset table penguin:

mysql> delete from penguin;

Шаг 8, загрузите в таблицу с помощью предложения fields escaped by:

mysql> load data local infile '/home/el/foo/textfile.txt' into table penguin 
       fields terminated by '\t' escaped by '\b' 
       lines terminated by '\n' (@col1, @col2) set [email protected], 
       [email protected];

Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0

Шаг 9, выберите из таблицы, интерпретируйте результаты:

mysql> select * from penguin;
+----+------------------------------------------------------------------+
| id | chucknorris                                                      |
+----+------------------------------------------------------------------+
|  1 | aliens are on route                                              |
|  2 | scramble the nimitz\                                             |
|  3 | \its species 8472                                                |
|  4 | \\\\\\\\\\\\\\\\\\                                               |
|  5 | Bonus characters:[email protected]#$%^&*()_+=-[]\|}{;'":/.?>,< anything but tab |
+----+------------------------------------------------------------------+
5 rows in set (0.00 sec)

И теперь все так, как мы ожидаем. Обратная косая черта в конце строки 2 не выходит за новую строку. Обратная косая черта перед i в строке 3 ничего не делает. 18 обратных косых черт в строке 4 не сбегают. И символы бонуса проходят нормально.