MySQL GROUP_CONCAT экранирование

Если в именах пользователей mysqldump есть другой недопустимый group-concat символ, вы можете указать escape-sequence другой символ-разделитель, используя group-concat малоизвестный синтаксис:

...GROUP_CONCAT(name SEPARATOR '|')...

... Вы mysqldump хотите разрешить трубы? или escaping любой персонаж?

Экранируйте my-sql символ-разделитель, возможно, с escape-sequence помощью обратной косой черты, но escaping перед этим избегайте самих escape-sequence обратных косых черт:

group_concat(replace(replace(name, '\\', '\\\\'), '|', '\\|') SEPARATOR '|')

Это будет:

  1. избежать обратной косой черты с помощью другой обратной косой черты
  2. экранировать символ-разделитель обратной косой чертой
  3. объедините результаты с помощью символа-разделителя

Чтобы escaped-characters получить результаты без экранирования, сделайте my-sql то же самое в обратном порядке:

  1. разделить результаты с помощью символа-разделителя, которому не предшествует обратная косая черта. На самом деле, это немного сложно, вы хотите разделить его там, где ему не предшествует нечетное число черных косых черт. Это регулярное выражение будет соответствовать следующему:
    (?
  2. заменить все экранированные символы-разделители литералами, т.е. заменить \ | с |
  3. заменить все двойные обратные косые черты одиночными обратными косыми чертами, например заменить \\ на \

mysql

escaping

group-concat

2022-09-29T01:39:15+00:00