Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UPPER не работает с русскими буквами [D7, XP]


abhtr ©   (2008-12-09 16:51:00) 

В запросе использую UPPER:
select *
from Prdca
where UPPER(Prdca_index) = UPPER('проба')
но она с английскими буквами работает, а с русскими - нет.
Работаю с FireBird 1.5.
Как можно сделать преобразование в верхний регистр?


Правильный$Вася   (2008-12-26 14:01:00) [1]


> _guest_   (26.12.08 13:18) [16]

читать надо сначала
[1]
и выводы делать

> Очевидно таков FB.

кто хочет, ищет способы, кто не хочет - причины


Johnmen   (2008-12-26 13:35:00) [2]


> Очевидно таков FB.

Очевидно, надо-таки читать документацию...


_guest_   (2008-12-26 13:18:00) [3]

Понимаю, что поезд ушел, но сам сталкнулся с такой же проблемой: Upper не работает с русскими буквами. FB у меня 2.1, других серверов нет, но добиться чтбы Upper заработал так и не удалось. Очевидно таков FB.


abhtr   (2008-12-10 12:17:00) [4]


> Но разобраться с upper и с зоопарком серверов все-таки желательно

Согласен. Конечно, я и базу решил разрабатывать под FireBird с учетом перехода на FireBird, только все откладывал на потом.
Так что будем решать...
Еще раз спасибо за советы.


Правильный$Вася   (2008-12-10 11:45:00) [5]


> разобраться с upper и с зоопарком серверов все-таки желательно

хотя бы потому, что и сортировки тоже используют признаки [1]


Sergey13   (2008-12-10 11:35:00) [6]

> [12] abhtr   (10.12.08 11:28)
> Останавливаюсь на этом варианте.

Но разобраться с upper и с зоопарком серверов все-таки желательно, ИМХО. Иначе придется, возможно, еще не раз обходить (а не решать) проблемы. Самое обидное, что выявляться они могут как угодно поздно.


abhtr   (2008-12-10 11:28:00) [7]


> Для полей типа твоего Prdca_index вполне ИМХО нормальное
> решение

Согласен.
Останавливаюсь на этом варианте.
Всем upper('спасибо')   :о)


Sergey13   (2008-12-10 11:20:00) [8]

> [9] abhtr   (10.12.08 11:12)
> Насколько FireBird 1.5 требует больше ресурсов чем InterBase 6.5?

На 2.

> [10] abhtr   (10.12.08 11:14)
> Я тоже об этом думаю
Для полей типа твоего Prdca_ indexвполне ИМХО нормальное решение. Для полей типа ФИО мне кажется это лишним.


abhtr   (2008-12-10 11:14:00) [9]


> я чтобы не мучаться с такими проблеммами всегда записи заполняю
> заглавными буквами

Я тоже об этом думаю, но как-то вроде не очень красиво само решение :о)
Что-то есть в этом решении пере... пере...


abhtr   (2008-12-10 11:12:00) [10]

Компьютер у заказчика слабоват.
Насколько FireBird 1.5 требует больше ресурсов чем InterBase 6.5?


9899100   (2008-12-10 11:03:00) [11]

я чтобы не мучаться с такими проблеммами всегда записи заполняю заглавными буквами
а в программе немного изменяю при выводе
например поле ФИО в базе ИВАНОВ ИВАН ИВАНОВИЧ
а пользователю выдаю Иванов Иван Иванович

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


Правильный$Вася   (2008-12-10 10:54:00) [12]


> базу я создаю как FireBird 1.5, но на компьютере, где все
> это работает стоит InterBase 6.5

не удивительно, резьба у шурупов и болтов разная


abhtr   (2008-12-10 10:30:00) [13]

Попробовал создать новую базу, в которой сразу указал кодировку win1251.
И все равно :о(((
Простой запрос
       select upper('фыппав')
         from Prdca
выдает теже буквы в нижнем регистре.
Т.е. не работает upper.
Может это потому, что базу я создаю как FireBird 1.5, но на компьютере, где все это работает стоит InterBase 6.5 ?


abhtr   (2008-12-10 09:48:00) [14]

Вариант
UPPER(cast Prdca_index as varchar collate WIN1251)
дает ошибку останавливая курсор на cast, а пишет Prdca_index

Вариант, который взят из статьи
where upper(Prdca_index COLLATE WIN1251)  = 'Л3134'
пишет сообщение об ошибке:
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.


Johnmen   (2008-12-09 18:56:00) [15]

http://www.ibase.ru/devinfo/ibrusfaq.htm


clickmaker   (2008-12-09 18:09:00) [16]

а там не работает что-то типа
UPPER(cast Prdca_index as varchar collate cyrillic_или_как_оно_там_в_FB)?


abhtr   (2008-12-09 17:52:00) [17]


> Правильный$Вася  

Да, все правильно.
Для всей базы стоит NONE, и для таблицы для полей VarChar стоит NONE.
Попробовал поменять. Вроде бы - поменялось.
Но запрос все равно не работает.
Может надо теперь и все данные "переконвертировать"?


Правильный$Вася   (2008-12-09 17:18:00) [18]

COLLATE
CHARACTER SET
F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо