Побег персонажей в MySQL, в Ruby - PullRequest
1 голос
/ 23 апреля 2010

У меня есть пара экранированных символов в полях, введенных пользователем, которые я не могу понять.

Я знаю, что это "умные" одинарные и двойные кавычки, но я не знаю, как их искать в mysql.

Символы в ruby ​​при выводе из Ruby выглядят как \ 222, \ 223, \ 224 и т. Д.

irb> "\222".length => 1

Итак - знаете ли вы, как искать их в MySQL? Когда я смотрю в mysql, они выглядят как «?».

Я хотел бы найти все записи с этим символом в текстовом поле. Я пытался

mysql> select id from table where field LIKE '%\222%' 

но это не сработало.

Еще немного информации - после выполнения mysqldump, вот как представлен один из символов - '\\ xE2 \\ x80 \\ x99'. Это умная единая цитата.

В конечном счете, я создаю файл RTF, и символы появляются совершенно неправильно, поэтому я пытаюсь заменить их на «тупые» кавычки. Я был в состоянии сделать gsub (/ \ 222 \, "'").

Спасибо.

1 Ответ

1 голос
/ 24 апреля 2010

Я не совсем понимаю вашу проблему, но вот некоторая информация для вас:

  • Во-первых, в базе данных нет экранированных символов. Потому что каждый символ хранится как есть, без экранирования.
  • они не похожи ?. У меня просто неверные настройки терминала. Запрос SET NAMES всегда должен выполняться первым, чтобы соответствовать кодировке клиента.
  • Вы должны определить набор символов и использовать его на каждом этапе - в базе данных, в клиенте mysql, в ruby.
  • Вы должны отличать представление строк ruby ​​от самого символа.
  • Чтобы ввести символ в запросе MySQL, вы можете использовать функция char . Но только в терминале. В рубине просто используйте сам символ.
  • умные кавычки выглядят как 2-байтовые кодированные в Unicode Сначала вы должны определить свою кодировку.
...