2015-04-17 3 views
1

Я работаю над базой данных, в которой имена были сохранены с использованием кодировки набора символов latin1 (latini_swedish_ci), но имена были на персидском языке.

Кажется, некоторые тела изменили таблицу сопоставления для utf8 (utf8_bin), но все данные, как это:

enter image description hereКак исправить кодировку данных mysql

мне интересно, как я могу это исправить значения.

Я изменил таблицу сортировки и DB сортировки, но все же у меня есть такие значения. Любая помощь будет оценена.

Спасибо-х заранее

+0

Вам нужно будет' utf8_general_ci'. Это похоже на арабский. и убедитесь, что база данных, таблица и поле имеют одинаковую сортировку. – SaidbakR

+0

Каков язык сценариев, который вы используете в своем приложении? – SaidbakR

+0

Все типы имеют одинаковую сортировку. Я думаю, что эти данные были обработаны с помощью phpNuke ... Я пытаюсь написать поисковую систему, которая будет работать независимо ... – mrm

ответ

4

Похоже, что вы имели

  • utf8 закодированные байты в клиенте и
  • SET NAMES latin1 (или эквивалент), и
  • CHARACTER SET latin1 на целевом столбце.

«Исправить», чтобы очистить таблицу, чтобы сделать 2-шаг АЪТЕК described here, который включает в себя

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; 
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...; 

где длины достаточно велики, а другой «...» есть все, else (NOT NULL и т. д.) уже был в столбце.

Извините, но это займет много времени, исправить 1500000 строк.

Я уверен, что это будет не работы:

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8; -- no 

Это будет работать только если в данный момент таблица содержит latin1 (и т.д.) эквивалент символов utf8. Для арабских символов нет латинского эквивалента.

(я вижу это как арабский: باس٠«Ø§Ù ... -> باسلام)

+0

+1 искал хорошее описание + пример, который должен сделать трюк - еще один +1 для хита, который будет работать для всех персонажей с латинским эквивалентом. – DominikAngerer

+0

@Rick James Спасибо за ваше время. Я последовал за твоими шагами, но все же данные как раньше. Я делаю что-то неправильно? – mrm

+0

Давайте проверим что-то еще. Пожалуйста, предоставьте 'SELECT col, HEX (col) ...' для небольшого количества текста в таблице. И, если возможно, скажите мне, как это должно выглядеть. (Если у вас «двойное кодирование», лечение еще хуже). –

1

Изменения в utf8_unicode_ci типа (Чтобы изменить набор символов по умолчанию и параметры сортировки таблицы, включая те из существующих столбцов - преобразовать в - здесь ключевая часть)

alter table <some_table> convert to character set utf8 collate utf8_unicode_ci; 

Суффикс _ci Суффикс означает, что сортировка и сравнение нечувствительны к регистру. так что это не должно быть проблемой.

UTF-8 - это кодировка для набора символов Unicode, которая должна поддерживать практически все языки мира.

Единственное различие заключается в сортировке результатов, разные буквы могут быть в другом порядке на других языках (акценты, умлауты и т. Д.). Например, сравнение a - ä может вести себя по-другому в другой сортировке.


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

+0

Спасибо за ваш ответ. Я использовал ваш запрос, но проблема все еще остается ... !!! И таблица, и столбцы имеют одинаковую кодировку ---> 'utf8_unicode_ci' – mrm

+0

Не могли бы вы вывести нам таблицу с несколькими строками? - хотел бы попробовать прямо, чтобы я мог предоставить вам реальное решение. – DominikAngerer

+0

Позвольте мне попытаться ... это огромная база данных с записью более 1500000 .... Я попытаюсь загрузить файл дампа где-нибудь .. – mrm

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