Устраняем символ '^M' в конце строк в SQL скриптах Unix
Быстрый ответ
Для удаления символа ^M (возврат каретки – CR) из строк в SQL используйте функцию REPLACE:
UPDATE my_table
SET my_column = REPLACE(my_column, CHAR(13), '');
Символ ^M в данном случае обозначен как CHAR(13). Функция REPLACE, примененная к столбцу my_column, будет эффективным решением этой задачи.

Раскрытие тайны '^M'
Символ ^M, появляющийся в конце строк, на самом деле является возвратом каретки. Он берет свое начало из эпохи DOS/Windows, когда окончание строки обозначалось комбинацией возврата каретки (CR) и символа перевода строки (LF), или \r\n. В Unix-системах вместо этого используется всего лишь один символ перевода строки (LF), \n. Так, если файл из DOS/Windows попадает в Unix-среду, CR превращается в ^M.
Манипуляции в различных средах
Преобразование файлов в vi или vim:
:set fileformat=unix " Говорим до свидания ^M в стиле Unix!
:w " Сохраняем сделанные изменения
Использование dos2unix для трансформации:
dos2unix filename " dos2unix разрешит данную проблему – ^M исчезнет!
Не пренебрегайте чтением man-страницы для полного понимания dos2unix.
Выяснение исходной ОС, словно детективная загадка:
Если исходная ОС файла вам неизвестна, команды file и hexdump помогут определить, какие разделители строк используются.
Нежелательная встреча SQL и '^M'
В процессе работы с базами данных SQL иногда внезапно возникают сложности с символом ^M, который может вносить хаос в скрипты импорта, пользовательский ввод или данные из внешних источников.
Приведение порядка в SQL-мире:
-- Для того чтобы очистить новые данные: "^M, твой путь здесь заканчивается!"
INSERT INTO my_table (my_column)
VALUES (REPLACE(input_data, CHAR(13), ''));
-- Для того чтобы очистить существующие данные: "^M, тебе тут не рады!"
UPDATE my_table
SET my_column = REPLACE(my_column, CHAR(13), '');
Визуализация
Представьте себе стихотворение, испорченное символом ^M в конце каждой строчки.
До очистки:
"Розы красные ^M
Фиалки синие ^M
SQL забавен ^M
И от ^M не зависим!"
А вот результат, достигнутый благодаря мастерским действиям:
REPLACE(yourString, CHAR(13), ''); " ^M – ты здесь лишний!"
После чистки:
"Розы красные
Фиалки синие
SQL забавен
И от ^M не зависим!"
Нежелательный символ ^M успешно устранен!✨
Как оградиться от '^M'
Настройки Git для защиты:
Активируйте параметр core.autocrlf в Git для того, чтобы предотвратить появление ^M в вашем коде.
Настройка IDE/текстового редактора:
Подстройте вашу IDE или текстовый редактор таким образом, чтобы они использовали окончания строк в Unix-стиле. Это важно для работы в многоплатформенной среде.
Автоматизация — ваш верный защитник:
Интегрируйте проверку окончаний строк в процесс CI/CD или используйте pre-commit хуки для предотвращения появления ^M в коде.
Полезные материалы
- Unix & Linux Stack Exchange: Что представляет собой
^Mи как от него избавиться? — Углубленное обсуждение работы с символом^Mв Unix. - dos2unix / unix2dos – Конвертеры текстовых файлов — Ссылка на документацию инструмента Dos2Unix / Unix2Dos, который позволяет изменять формат файлов между DOS/Windows и UNIX.
- Удаление специальных символов с помощью sed — Объяснение процесса очистки текста от специальных символов с использованием
sed, включая символ^M. - Git – Настройка Git — Инструкции по настройке Git для контроля окончаний строк.
- Туториал по регулярным выражениям — Обширное руководство по регулярным выражениям, включая поиск и удаление специальных символов, вроде
^M. - Советы в области Vim: Формат файла — Набор полезных команд Vim для работы с файлами различных форматов и окончаниями строк.