Это действительно старый вопрос, но есть другой способ сделать это, который может быть или не быть более безопасным, в зависимости от вашей точки зрения. Это требует MySQL 5.6 или позже из-за использования определенной строковой функции: FROM_BASE64
.
Допустим, у вас есть это сообщение, которое вы хотите вставить:
«Ах, - почти безголовый Ник махнул изящной рукой, - это неважно… Я не хотел присоединяться… Я думал, что подам заявку, но, видимо, я не выполняю требований». '- "
Эта цитата содержит несколько одинарных и двойных кавычек, и было бы очень трудно вставить ее в MySQL. Если вы вставляете это из программы, легко избежать кавычек и т. Д. Но, если вам нужно вставить это в сценарий SQL, вам придется редактировать текст (чтобы избежать кавычек), который может быть подвержен ошибкам или чувствительны к переносу слов и т. д.
Вместо этого вы можете закодировать в base64 текст, чтобы у вас была «чистая» строка:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Некоторые заметки о base64-кодировке:
- base64-encoding - это двоичная кодировка , поэтому вам лучше убедиться, что вы правильно набрали свой набор символов при кодировании, потому что MySQL собирается декодировать строку в кодировке base64 в байты а затем интерпретировать их. Убедитесь, что
base64
и MySQL согласны с кодировкой символов (я рекомендую UTF-8).
- Я обернул строку в 50 столбцов для удобства чтения в SO. Вы можете обернуть его в любое количество столбцов, которые вы хотите (или не обернуть вообще), и он все равно будет работать.
Теперь, чтобы загрузить это в MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
Это вставит без каких-либо жалоб, и вам не пришлось вручную экранировать текст внутри строки.