Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
28.05.2018, 00:50
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
Задача такая. Необходимо получить GROUP_CONCAT от контрольных сумм CRC32 некоторых полей. Причём в составе GROUP_CONCAT каждая контрольная сумма должна быть представлена в бинарном виде (4 байта). Пишем запрос: Код: plsql 1. В итоге получаем GROUP_CONCAT от строковых представлений чисел CRC32 (от 1 до 10 символов). В справке написано : авторThe return value is a nonbinary or binary string, depending on whether the arguments are nonbinary or binary strings Пробуем явно указать тип данных BINARY или BINARY(4), передаваемых функции GROUP_CONCAT: Код: plsql 1. В итоге получаем GROUP_CONCAT от первых 4 символов строковых представлений CRC32. Отсюда делаем вывод: CRC32 возвращает строковое представление числа (от 1 до 10 символов). Где подвох ? P.S . А получить-то нужно всего лишь последовательность байт (бинарную строку). Для 10 полей должна быть получена бинарная строка из 40 байт (десять 4-байтовых целых чисел) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2018, 01:05
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
я бы предложил попробовать через HEX, примерно так: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2018, 14:11
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
авторя бы предложил попробовать через HEX, примерно так:Да, такой вариант работает. На период выполнения проблемной функции GROUP_CONCAT преобразовываем байты в строку, а после GROUP_CONCAT - восстанавливаем. Вместо SUBSTRING(HEX(4294967296+CRC32), -8, 8) можно использовать LPAD(HEX(CRC32)), 8, '0'): Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 00:15
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
авторВ итоге получаем GROUP_CONCAT от первых 4 символов строковых представлений CRC32... На период выполнения проблемной функции GROUP_CONCAT... Всё сводится к тому, что и GROUP_CONCAT(), и CAST() сначала приводят свой аргумент к строковому типу и только затем выполняют конкатенацию или приведение типа соответственно. Что касается конкатенации, то такое поведение противоречит справке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 07:41
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
Cyrax_02Всё сводится к тому, что и GROUP_CONCAT(), и CAST() сначала приводят свой аргумент к строковому типу и только затем выполняют конкатенацию или приведение типа соответственно. Что касается конкатенации, то такое поведение противоречит справке...Не очень понял касательно GROUP_CONCAT(), а как еще может быть? Конкатенация - это соединение нескольких строк в одну. Конечно же, нужно сперва преобразовать данные произвольных типов к строковому типу. И противоречия справке я не нашел. Можете точное место указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 07:45
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
У GROUP_CONCAT() в доке есть отсылка к CONCAT(), а у того уже написано: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat A numeric argument is converted to its equivalent nonbinary string form. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 09:55
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
авторThe return value is a nonbinary or binary string, depending on whether the arguments are nonbinary or binary strings If all arguments are nonbinary strings, the result is a nonbinary string. If the arguments include any binary strings, the result is a binary string A numeric argument is converted to its equivalent nonbinary string form. Понимается так, что если числа, то получим конкатенацию строковых представлений. Если бинарные строки - бинарную/байтовую конкатенацию (то что нужно). Только вот CAST числа (CRC32) к бинарным строкам как-то ненормально приводит. Предварительно получает строковое представление числа и только затем приводит к бинарной строке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 10:07
|
|||
|---|---|---|---|
GROUP_CONCAT(CRC32(...)) SEPARATOR ''. Есть кузявка |
|||
|
#18+
Cyrax_02, Не бинарную конкатенацию, а конкатенации бинарных строк. Бинарные строки - это обычные строки с тем исключением, что к ним не применяются операции преобразования кодировки при передаче и хранении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1829824]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 149ms |

| 0 / 0 |
