2013-04-18 2 views
1

Через год назад мы перенесли наши данные в MySQL. Из-за несоответствия кодирования в записи был вставлен ряд странных символов (Ã, ª, € и т. Д.). Мы хотели бы отслеживать все такие символы во всей базе данных.Поиск странных символов в mysql

Я пробовал следующий запрос.

select * from <table_name> where <field_name> regexp '[^a-zA-Z0-9&,$\'"() .-]' 

Это дает мне все записи, которые имеют какой-либо символ (ы), кроме аз, AZ, 0-9, &, запятая, доллар, одной котировки, дважды котировальный, скобка, пробел, период , дефис в таблице <field_name> конкретной таблицы.

Но потребуется много времени, чтобы найти все странные символы, так как у нас есть приблизительно 93 таблицы с приблизительно 20 полями каждый.

Есть ли лучший подход для решения проблемы?

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

+0

Вы идентифицировали и исправили несоответствие кодирования? Если это так, лучше всего исправить ошибки один за другим, а не пытаться отслеживать. – cmbuckley

+0

Мы знаем, что было несоответствием кодирования. Но это слишком поздно, чтобы исправить это и снова мигрировать. И выяснение всех символов с помощью запроса, как то, что я упомянул в вопросе, потребует много времени. Разве нет лучшего подхода? – Taran

ответ

1

Персонажи, о которых вы упоминаете, выглядят как данные utf-8, отображаемые так, как если бы они были восьмью символами ASCII или Latin-1.

Вот сообщение о том, как найти проблемы. Он работает лучше, чем ваш подход, и является супердисциплинированным в отношении соответствия набора символов.

How can I find non-ASCII characters in MySQL?

Можете ли вы предоставить определение таблицы одной из таблиц, содержащих этот мусор? Таким образом, мы можем видеть настройки набора символов и сортировки таблицы и столбцов.

+0

CREATE TABLE 'Recipe' ( \t' Recipe_Id' BIGINT (20) NOT NULL AUTO_INCREMENT, \t 'Language' УАКСНАК (255) NULL, NULL, УМОЛЧАНИЮ, \t' Brand_Id' BIGINT (20) NOT NULL, \t 'Is_Deleted' TINYINT (1) NOT NULL, \t 'Brand_Reference_No' VARCHAR (255) NULL DEFAULT значение NULL, \t' Display_Title' VARCHAR (255) NOT NULL, ... так далее. я видел ваш ответ на другой линии. Гораздо лучше подход, чем мой. – Taran

Смежные вопросы