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;
Увидев больше проблем, это "двухэтапное ALTER", вероятно, правильно:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET latin5 ...;
Сделайте это для каждой таблицы. Обязательно сначала проверьте это на копии ваших данных.
двухэтапный оператор ALTER полезен, когда байты верны, а CHARACTER SET
нет.
CONVERT TO
следует использовать, когда символы правильные, но вам нужна другая кодировка (и CHARACTER SET
). См. Случай 5.
Изменить 1
E7
и FD
и cp1250, dec8, latin1 и latin2 для ç
и ý
. FD
на латыни5 это ı
. Я делаю вывод, что ваша кодировка latin1
, а не latin5
.
Вы говорите, что не можете изменить «сценарии». Давайте посмотрим на ваши ограничения. Вы ограничены на стороне INSERT
? Или сторона SELECT
? Или оба? Что такое рендеринг текста; HTML? MySQL готов перейти с latin1 на/с latin5, и вы вставляете/выбираете (на основе нескольких настроек). И/или вы можете солгать HTML (через метатег), чтобы заставить его интерпретировать байты по-другому. Уточните детали потока данных.
Изменить 2
Учитывая, что шестнадцатеричное число в таблице равно E7FD6B6172FD6C6D6173FD6E61
, и оно должно отображаться как çıkarılmasına
, ... Обратите внимание, что вторая буква должна отображаться как ı
(маленькая I без точек по-турецки), а не ý
(маленькая Y с острым знаком), верно?
Начните с попытки
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"/>
Это должно дать вам рендеринг `latin5, как вы уже выяснили. Справочник IANA.
Что касается «Оптимальной практики», это будет включать изменение способа вставки текста. Вы заявили, что это запрещено.
По-видимому, у вас есть символы latin5, хранящиеся в столбце latin1. Поскольку latin1 не требует проверки, вы можете без проблем вставлять и извлекать символы latin5.
Это не относится к желанию иметь турецкую сортировку. Если необходимо, я, вероятно, смогу придумать способ указать турецкий порядок для конкретных утверждений; просьба предоставить образец заявления.
person
Rick James
schedule
11.12.2015
character_set_client
неправильный набор символов, прочитать данные, а затем записать данные обратно, используя правильный. - person 0xCAFEBABE   schedule 25.11.2015SELECT col, hex(col) FROM tbl WHERE ...
, чтобы мы могли увидеть, что было сохранено. Кроме того,SHOW CREATE TABLE
- person Rick James   schedule 11.12.2015