Ответ 1
Вам нужно избегать обратной косой черты:
INSERT INTO gender
(sex, date) VALUES (
'male are allowed \\ female are not allowed',
"2012-10-06")
Ссылка (со списком всех символов, которые вы должны выполнить для 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.
Вам нужно избегать обратной косой черты:
INSERT INTO gender
(sex, date) VALUES (
'male are allowed \\ female are not allowed',
"2012-10-06")
Ссылка (со списком всех символов, которые вы должны выполнить для mysql)
Шаг 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 не сбегают. И символы бонуса проходят нормально.