Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MySQL strcmp  (Прочитано 11119 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« : 18-11-2010 06:03 » new

Столкнулся с такой проблемой. MySQL не хочет сравнивать blob'ы
К примеру имеется таблица:

Код:
-----------------------------------------------------------
|   id   |   text1   |   text2   |   blob1   |   blob2   |
-----------------------------------------------------------
|   10   |   12345   |   54321   |   5 байт  |  10 байт  |
-----------------------------------------------------------

Запрос: select strcmp(text1,text2) from table where id=10 возвращает -1
А запрос: select strcmp(blob1,blob2) from table where id=10 возвращает null

Кто-нибудь может подсказать как сравнить блобы?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 18-11-2010 06:33 » 

Версия сервера?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 18-11-2010 07:08 » 

5.1.41
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-11-2010 07:50 » 

Сильно устарело. Сперва обновись и потом уже проведи тесты снова.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 18-11-2010 08:45 » 

Сильно устарело. Сперва обновись и потом уже проведи тесты снова.
Обновил до 5.1.51 - не помогло. Новее версии на сайте нет.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 18-11-2010 08:55 » 

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

Тест 1:

mysql> select strcmp(binary "Abc", "abc");
+-----------------------------+
| strcmp(binary "Abc", "abc") |
+-----------------------------+
|                          -1 |
+-----------------------------+
1 row in set (0.10 sec)

Тест 2:

mysql> create table t3 (b1 blob, b2 blob);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t3 values ('Abc', 'abc'), ('abc', 'abc'), ('abc',  'Abc'), (NULL, 'abc');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select strcmp(b1, b2) from t3;
+----------------+
| strcmp(b1, b2) |
+----------------+
|             -1 |
|              0 |
|              1 |
|           NULL |
+----------------+
4 rows in set (0.00 sec)

Т.ч. вывод: одно из твоих значений - NULL.

Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #6 : 18-11-2010 09:04 » 

Paul, а что вернется на эти?
select strcmp(blob1,blob1) from table where id=10
select strcmp(blob2,blob2) from table where id=10
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #7 : 18-11-2010 09:10 » 

BLOB values are treated as binary strings (byte strings). They have no character set, and sorting and comparison are based on the numeric values of the bytes in column values.
Переведи значение blob-поля в VARCHAR и сравни так..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 18-11-2010 09:11 » 

Paul, попробуй вот это:

Код:
select hex(blob1), hex(blob2) from table where id=10;
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 18-11-2010 09:15 » 

RXL, действительно, в запросе была ошибка и один из блобов получался равен NULL. Спасибо за помощь.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines