Закодированные символы оказались в моем MySQL - PullRequest
3 голосов
/ 22 марта 2011

У меня проблема с кодировкой - у меня есть данные, хранящиеся в таблице MySQL. Выполняя какую-то работу, одна из моих колонок в моей таблице собрала несколько табельных знаков и знаков отрицания; или обычный бриллиант с вопросительным знаком в зависимости от кодировки. Вместо того, чтобы вручную изменять каждую строку, есть ли быстрый способ поиска и уничтожения символов из БД?

Я играл как с настройками браузера, так и с использованием UTF-8, Western 1252 и ISO-8859-1. Я был доволен тем, как данные были закодированы ранее, я просто хочу удалить неправильно закодированные whatevers из БД. Я попытался написать быстрый PHP-скрипт, чтобы получить все символы и заменить их, но я не могу понять, что они из себя представляют. Есть идеи?

Вот символы, которые видны в UTF-8 ¬†

1 Ответ

1 голос
/ 22 марта 2011

Я не знаю, можете ли вы на самом деле это сделать, но

UPDATE `table` SET column = replace(column, REGEXP '[\x00-\x1F\x80-\xFF]', '');

Убедитесь, что вы запускаете это как выбор или делаете это во временной песочнице БД.Я не знаю, допустимо ли это в mysql.

Я знаю, что есть сторонние библиотеки регулярных выражений, которые могут сделать это, но требуют изменения вашей базы данных.Я не знаю, как это работает.

РЕДАКТИРОВАТЬ

ВыЛучше написать небольшой скрипт PHP, чтобы сделать это для вас.Вышеупомянутое регулярное выражение будет работать для удаления мусорных символов.

$data = preg_replace_all('/[\x00-\x1F\x80-\xFF]/', '', $data);

Еще раз, если раньше это не было понятно: НЕ СЛЕДУЕТ ВСТАВИТЬ В МОЕ ВЫШЕ ЗАЯВЛЕНИЕ О SQL, поскольку я понятия не имею, что на самом деле произойдет.

...