ASCII определяет только символы для байтов 0-127 и содержит только базовые латинские az и AZ.Символы ó
, ż
и ć
не существуют в ASCII.Для этих символов вам нужен один из 'расширенных' наборов символов ASCII (или расширенного ANSI), который является неточным термином для однобайтовых наборов символов, где байты 0-127 отображаются в ASCII и байты 128-255 отображаютсядля набора символов конкретных символов.Примеры включают ISO-8859-1 (Firebird: ISO8859_1), Windows-1252 (FB: WIN1252) и несколько десятков других.
Звучит так, как будто данные изначально были сохранены драйвером, который использовал набор символов подключения NONE
, но отправлено байтов в наборе символов по умолчанию клиентской ОС.Использование набора символов подключения NONE позволяет сохранить отправленные байты как есть.Но когда символы извлекаются как ASCII драйвером Firebird.net, они будут сопоставлены?поскольку для этих байтов в ASCII не существует сопоставления.
Точно так же, когда вы пытаетесь привести к UTF8 в Firebird, Firebird не знает, что делать с несопоставленными байтами, и выдает ошибку транслитерации.Обходной путь к этому - сначала привести к NONE, затем к правильному набору символов (и, необязательно, к целевому набору символов).Например,
cast(cast(yourcolumn as varchar(100) character set none) as varchar(100) character set win1250)
Чтобы исправить это, вам нужно знать, какой был исходный набор символов (глядя на то, что ż
это может быть Windows-1250, имя Firebird WIN1250), и исправить вашу базу данных.
Это можно сделать несколькими способами:
- Исправить данные в текущей базе данных или
- создать новую базу данных с правильным набором символов иперекачивание данных из старого в новое (с необходимыми приведениями, где это необходимо)
Вариант 1 может быть довольно сложным, особенно если речь идет о больших двоичных объектах, может потребоваться создать новые столбцы для копирования данных и исправлениянабор символов.Вариант 2 обычно проще, но поскольку всю базу данных необходимо скопировать в новую, может потребоваться больше времени, если потребуется исправить только несколько столбцов.