FB и умляуты

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

FB и умляуты

Сообщение dgs » 27 сен 2007, 14:37

Как правильно указать кодировку для базы что бы корректно вовдились итображались умляуты?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 27 сен 2007, 15:10

Спросить у немцев, какая кодовая страница у них установлена по умолчанию. Ну или абсолютное решение - уникод.

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 28 сен 2007, 16:17

Dimitry Sibiryakov писал(а):Спросить у немцев, какая кодовая страница у них установлена по умолчанию. Ну или абсолютное решение - уникод.
А если указать NONE?
Чем отличается
SET NAMES NONE;
и
DEFAULT CHARACTER SET NONE;
?
ещё я так понмаю у меня будут проблемы с отображением умляутов на клиенте которого я планирую писать на делфи?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 сен 2007, 17:31

SET NAMES NONE;
это команда ISQL. говорит чтобы isql в коннекте, который откроется СЛЕДОМ за этой командой, работал с символами в чарсете NONE.
DEFAULT CHARACTER SET NONE;
это часть оператора create database. при которой указывается УМОЛЧАТЕЛЬНЫЙ чарсет, который используется при создании объектов, если у них чарсет не указан явно.

www.ibase.ru/devinfo/ibrusfaq.htm
правда тут про уникод почти ничего не сказано. надо будет добавить, т.к. в IB2007 и FB2 теперь нормальный уникод есть.

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 03 окт 2007, 17:02

Что бы приложение написанное на делфи корректно отображало немецкие символы что мне нужно сделать (свои экспирименты пока не увенчались успехом :( )?
Использую FB 1.03, хотелсоь бы обойтись без юникода т.к. в делфи нtт нативной его поддержи, ели это конечно возможно.

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 04 окт 2007, 12:04

Dimitry Sibiryakov писал(а):Спросить у немцев, какая кодовая страница у них установлена по умолчанию. Ну или абсолютное решение - уникод.
Знаю я кодировку 1252 ну и что всё равно умляуты не сохраняются :(

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 14 янв 2008, 19:36

Создал базу FB embeded 2.03

SET SQL DIALECT 3;
SET NAMES WIN1252;
DEFAULT CHARACTER SET WIN1252;

Умляуты созраняются и отображаются нормально, но когда надо вести поиск по строке в которой есть умляут (делаю поиск разумеется select-ом) - результат всегда пустой, разумется поиск без умляутов работает отлично. Вопрос что делать что б селект у которого в условиях есть умлыту правильно отрабатывал.

Второй вопрос поскольку любимый тулз IB/FB - IBExpert так же не отображает умляуты у тексте запроса подскажите плиз как его натсроить чтоб отображал или посоветуйте другой инстурмент для отладки таких запросов. Спасибо!

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Сообщение Tonal » 15 янв 2008, 08:17

Какую ты указываешь кодировку подключения?

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 15 янв 2008, 13:08

Tonal писал(а):Какую ты указываешь кодировку подключения?
lc_ctype=WIN1252
Не помню точно версия embeded не игноррирует ли случайно эти параметры?

SinDmit
Сообщения: 7
Зарегистрирован: 14 янв 2008, 14:32

Сообщение SinDmit » 15 янв 2008, 13:16

немцы отвечают: :)

SET NAMES ISO8859_1;

а чтобы правильно сортировалось, то при создании поля:
ALTER TABLE <TableName> ADD <FieldName> VARCHAR(10) COLLATE DE_DE;

SinDmit
Сообщения: 7
Зарегистрирован: 14 янв 2008, 14:32

Сообщение SinDmit » 15 янв 2008, 13:22

немцы отвечают: :)

SET NAMES ISO8859_1;

а чтобы правильно сортировалось, то при создании поля:
ALTER TABLE <TableName> ADD <FieldName> VARCHAR(10) COLLATE DE_DE;

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 15 янв 2008, 14:28

SinDmit писал(а):немцы отвечают: :)

SET NAMES ISO8859_1;

а чтобы правильно сортировалось, то при создании поля:
ALTER TABLE <TableName> ADD <FieldName> VARCHAR(10) COLLATE DE_DE;
Спасибо заработало интеерсно что кодировка смой базы осталась WIN1252 и данные были введены ещё в ней. Вопрос надо ли пересоздать базу с кодировкой ISO8859_1 или можно использовать базу созданную с WIN1252 и просто использовать ISO8859_1 для коннекта?

SinDmit
Сообщения: 7
Зарегистрирован: 14 янв 2008, 14:32

Сообщение SinDmit » 15 янв 2008, 18:10

Без понятия, но если посмотреть в системные таблицы RDB$CHARACTER_SETS и RDB$COLLATIONS, то увидишь, что DE_DE только для ISO8859_1

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 15 янв 2008, 19:17

SinDmit писал(а):Без понятия, но если посмотреть в системные таблицы RDB$CHARACTER_SETS и RDB$COLLATIONS, то увидишь, что DE_DE только для ISO8859_1
Логично, DE_DE для 1252 не работает точно

SinDmit
Сообщения: 7
Зарегистрирован: 14 янв 2008, 14:32

Сообщение SinDmit » 16 янв 2008, 11:53

кодировка базы влияет только на на создание строковых полей по умолчанию.
Имея базу одной кодировки, можно поля создавать в любой другой.

а дальше насколько помню, может и ошибаюсь:
Указывая кодировку при подключении, клиент (а может сервер) пытается правильно перекодировать содержимое текстовых полей в запрошенную кодировку. Тут лучше в книге от Борри почитать, у неё там это где-то было.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 янв 2008, 13:34

клиент указывает кодировку, а сервер пытается перекодировать.
если таблиц перекодировки из одной в другую нет - облом. Если есть - сконвертируется (например win1251 в koi8r и обратно).

dgs
Сообщения: 21
Зарегистрирован: 26 сен 2007, 18:50

Сообщение dgs » 16 янв 2008, 14:24

kdv писал(а):клиент указывает кодировку, а сервер пытается перекодировать.
если таблиц перекодировки из одной в другую нет - облом. Если есть - сконвертируется (например win1251 в koi8r и обратно).
Спасибо!
Правлиьно я ли я вас что пока в настоящую работу база не запущена лучше пересоздать её с той кодировкой с которой она будет использоваться?

И второй почему всётаки не рабоатет запрос с умляутом в условии отбора, если использовать 1252 - хочется понять причину.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 янв 2008, 15:13

пока в настоящую работу база не запущена лучше пересоздать её с той кодировкой с которой она будет использоваться?
разумеется.
И второй почему всётаки не рабоатет запрос с умляутом в условии отбора
тут без понятия. возможно, 1252 хоть и "европейская", но не немецкая кодировка.

Ответить