powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / попробуйте на FB1.5 плз - преобразование типов, unicode, баг
6 сообщений из 6, страница 1 из 1
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32369847
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С Роджеством Христовым!

У меня Firebird-1.0.2.908-Win32. Есть баг (или я не понимаю), попробуйте пожалуйста на FB1.5 который у вас есть.

диалект 3, кодировка по умолчанию для базы - UNICODE_FSS

Суперпроцедура для определения типа данных (тестовый кусок):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE  "valtype"  (
     "value"  VARCHAR( 255 ))
RETURNS (
     "type"  SMALLINT,
     "datetime"  TIMESTAMP,
     "string"  VARCHAR( 255 ))
AS
begin
  begin
     "datetime"  =  "value" ;
     "type"  =  6 ;
    when sqlcode - 413  do
    begin
       "type"  =  4 ;
       "string"  =  "value" ;
    end
  end
  suspend;
end


если ей на вход давать текст, распознаваемый как дата - возвращает дату. если английский текст - возвращает строку. Если русский текст - Cannot transliterate character between character sets на строке "datetime" = "value".

Считаю это неправильным, но на epsylon.public.interbase меня не слышат.

Спасибо!
...
Рейтинг: 0 / 0
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32370025
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 1.5 RC7 - дает то же самое сообщение, при использовании русских букв.
...
Рейтинг: 0 / 0
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32370056
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо.

я сделал строчку when sqlcode -802, sqlcode -413 do - теперь вроде работает как я хотел... но все равно мне кажется это неправильно. то есть unicode не работает как надо. это я еще не проверял - вдруг и с обычными однобайтными кодировками тоже самое.
...
Рейтинг: 0 / 0
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32370144
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот выдержка из другого форума. Я проверял на IB6 и FB1.5RC6 - есть такой глюк, сервер действительно виснет в мёртвую. Глюк конечно нехороший очень.
автор Есть БД, часть определения которой приведена ниже.
CODE
SET SQL DIALECT 3;
SET NAMES UNICODE_FSS;
CREATE DATABASE 'C:\MyProjects\ENG\IBDB\AC011.GDB'
USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 8192
DEFAULT CHARACTER SET UNICODE_FSS;

CREATE DOMAIN CH10 AS VARCHAR(10);
CREATE DOMAIN CH50 AS VARCHAR(50);
/* ... */
CREATE TABLE ROOMS (
PRJCODE INTEGER NOT NULL,
ROOMNO CH10 NOT NULL,
NAME CH50
/* ... */
);


Возникает проблема при выполнении операторов вида
CODE
SELECT * FROM ROOMS WHERE NAME LIKE 'Коридор%'

причем правый символ % может отсутствовать (поведение то же). При выполнении этого оператора сервер подвисает (испробовано на IB6, FB1, FB1.5). Если вместо 'Коридор' написать 'Coridor', запрос выполняется нормально. Запрос выполнялся нормально и тогда, когда DEFAULT CHARACTER SET был WIN1251. Запросы вида
CODE
SELECT * FROM ROOMS WHERE UPPER(NAME) LIKE UPPER('КОРИДОР%')

(именно так: UPPER('от_больших_букв') - описано, кажется, в открытых фичах/багах FB1) вываливает все записи, где NAME написано в данном случае кириллицей.

Вопрос: лечится ли это как-то? Если лечится, просьба прояснить, как. Если нет, просьба кинуть идею, какой конструкцией можно заменить указанные операторы.
...
Рейтинг: 0 / 0
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32370231
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а там проблема могла быть в том, что IBExpert, а может быть, и isql не умеют подключаться с unicode_fss.
Мой джавный клиент подключается нормально (потом когда просматриваешь русский текст в IBE, там видно белиберду в 2 раза длиннее).
Однако если

Код: plaintext
1.
2.
String q =  "select * from T where C like ?" ;
PreparedStatement s = c.PrepareStatement(q);
s.setString( 1 ,  "Коридор%" ); // то есть и фразу  "Коридор%"  передавать в юникоде


не будет работать - то я повешусь, честное слово!!

надо попробовать, а то я сделал, доверился, и еще не попробовал. сколько мне жить осталось...
...
Рейтинг: 0 / 0
попробуйте на FB1.5 плз - преобразование типов, unicode, баг
    #32370987
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слава Богу like из джавы с юникодом нормально сработал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    String q =  "select * from \" Tstring\ " where \" content\ " like ?" ;
    java.sql.Connection c = ds.getConnection();

    try
    {
      java.sql.PreparedStatement s = c.prepareStatement(q);
      s.setString( 1 , this.jTextField1.getText());

      java.sql.ResultSet r = s.executeQuery();

      if (r.next())
      {
        this.jTextField2.setText(r.getString( "\" content\""));
      }
      r.close();
      s.close();
      c.commit();
      c.close();
    }


в окошке можно вводить любые паттерны и оно находит как надо.

gray_k, в том примере проблема с клиентом, я уверен. он не может с юникодом работать - передает то, что в юникоде не имеет смысла, и сервер виснет.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / попробуйте на FB1.5 плз - преобразование типов, unicode, баг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]