SELECT CONVERT(CONVERT(UNHEX('d0dddef0fdfe') USING ...) USING utf8);
latin5/iso-8859-1
показывает ĞİŞğış
latin1/iso-8859-9
показывает ÐÝÞðýþ
Вы смешивая два одинаковых кодировки; см. первый абзац в https://en.wikipedia.org/wiki/ISO/IEC_8859-9.
«Сортировка» предназначена только для сортировки. Но сначала вам нужно изменить CHARACTER SET
на latin5. Затем измените сопоставление на latin5_turkish_ci. (Поскольку это значение по умолчанию для latin5, никаких действий не требуется.)
Это может достаточно, чтобы сделать изменения в MySQL: EDIT 3
NO, this is probably wring -- ALTER TABLE tbl CONVERT TO CHARACTER SET latin5;
После просмотра более вопроса, это "2 шага ALTER", вероятно, правильно:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET latin5 ...;
Сделайте это за каждым столом. Обязательно сначала проверьте это на копии своих данных.
2-step ALTER полезен, если байт верны, но CHARACTER SET
нет.
CONVERT TO
следует использовать, когда символы правильно, но вы хотите другую кодировку (и CHARACTER SET
). См. Case 5.
Edit 1
E7
и FD
и CP1250, dec8, latin1 и latin2 для ç
и ý
. FD
in latin5 - ı
. Я пришел к выводу, что ваша кодировка - latin1
, а не latin5
.
Вы говорите, что вы не можете изменить «скрипты». Давайте посмотрим на ваши ограничения. Вы ограничены на стороне INSERT
? Или сторона SELECT
? Или оба? Что представляет собой текст; HTML? MySQL хочет перейти с latin1 на/from latin5, и вы вставляете/выбираете (на основе нескольких настроек). И/или вы можете лгать HTML (через метатег), чтобы заставить его интерпретировать байты по-разному. Пожалуйста, укажите детали потока данных.
Edit 2
Учитывая, что HEX в таблице E7FD6B6172FD6C6D6173FD6E61
, и оно должно быть вынесено как çıkarılmasına
... Примечание особенно вторая буква должна показать, как ı
(турецкий Dotless небольшой I), не ý
(маленький Y с острым), правильно?
Start, пытаясь
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"/>
Это должно дать вам `latin5 рендеринга, как вы уже выяснили. IANA Reference.
Что касается «Лучшей практики», это связано с изменением способа ввода текста. Вы заявили об этом как о запрете.
Очевидно, у вас есть латинские символы, сохраненные в столбце latin1. Поскольку latin1 не требует какой-либо проверки, вы можете без проблем вставлять и извлекать латинские символы.
Это не касается желания иметь турецкую сортировку. В случае необходимости я, вероятно, смогу указать способ указания турецкого заказа на конкретные заявления; просьба представить образец заявления.
Вы определили, какой неправильный набор символов использовался для записи значений в базу данных?Вы можете попытаться установить свой 'character_set_client' в неправильный набор символов, прочитать данные, а затем записать данные обратно с помощью правильного. – 0xCAFEBABE
Вы имеете в виду выбор, преобразование и вставку в таблицы? – dogano
Судя по тому, что вы описали, кодировка была неправильной, когда кто-то вставил данные в базу данных. Самый последовательный способ исправить это - использовать одну и ту же кодировку для считывания неверно закодированных данных, а затем переписать ее в базу данных с правильной кодировкой. – 0xCAFEBABE