Выбор всех строк с символами не-UTF8 - PullRequest
2 голосов
/ 08 февраля 2011

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

В настоящее время я пробовал "как"% Ã%«», который работает довольно хорошо, но далеко не на 100%.Это регулярное выражение не велико, так как оно возвращает все наши успешно переведенные в utf8 символы, а также пробелы и т. Д. (REGEXP '(\ S + [^ A-Za-z0-9] +)' "). Хотяпоследние достаточно легко получить, я не уверен, что регулярное выражение является лучшим маршрутом.

Примеры строк, которые не были выбраны, включали такие символы, как "diÃ", "yÃcel" и "Grà ¥ berg".

Спасибо

1 Ответ

0 голосов
/ 08 февраля 2011

Я не уверен, что это можно (или, возможно, следует) сформулировать в запросе SQL. Вы можете просто выполнить итерацию по всей базе данных и посмотреть, являются ли каждая строка действительными данными UTF-8, выводя ключи для строк, которые не являются. Я не уверен, есть ли в PHP готовая функция для проверки, «правильны ли эти байты UTF-8», но в Python есть, - если вы это знаете, вы могли бы это рассмотреть. Однажды я написал программу для этого, потому что у меня были похожие проблемы. (У меня нет исходного кода, извините.)

Следует помнить одну вещь: возможно, но маловероятно, что строка, случайно сохраненная и закодированная как ISO-8859-1, также является допустимой строкой UTF-8.

Я не знаю, как MySQL обрабатывает строки, но позволяет ли MySQL вставлять строку, отличную от UTF-8, в базу данных UTF-8? (Например, PostgreSQL не позволит вам сделать это в базах данных UTF-8.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...