SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.04.2015 19:02:57

Kim
Участник
Зарегистрирован: 31.01.2015
Сообщений: 16

Массивы, update элементов

Нужно положить в строку массив из 240 32-битных чисел и потом обновлять некоторые из них. Я так понимаю в MySQL нет массивов и не будет. В таком случае беру binary, но он почему-то размером 960 не создается, поэтому вопросы:
1) Я что-то делаю не так или binary просто не создать длиной 960 байт?
2) Допустим я создал бинарный массив на 960 байт через тот же blob. Можно ли и как обновить значения произвольных байт, например под индексами: 0,1,2,3 и 8,9,10,11?

Отредактированно Kim (09.04.2015 19:03:16)

Неактивен

 

#2 09.04.2015 20:04:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Массивы, update элементов

BINARY не может быть более 255 символов по определению. Используйте BLOB.

Используйте INSERT:
https://dev.mysql.com/doc/refman/5.6/en … ion_insert

Неактивен

 

#3 09.04.2015 21:05:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Массивы, update элементов

Массивы есть в MariaDB
https://mariadb.com/kb/en/mariadb/dynamic-columns/

Неактивен

 

#4 10.04.2015 09:04:46

Kim
Участник
Зарегистрирован: 31.01.2015
Сообщений: 16

Re: Массивы, update элементов

У меня сейчас Percona, т.к. я работаю только с memory таблицами, а в ней они поддерживают blob'ы и varchar'ы динамического размера. MySQL под них всегда выделяет фиксированный максимальный для типа объем памяти, и тип таблицы выставляет только fixed. В MariaDB как у Percona или тоже размер фиксирован?
Можете набросать маленький примерчик MariaDB таблицы с массивом mediumint[240] и как делать update одного из элементов массива?, буду очень признателен smile

Отредактированно Kim (10.04.2015 09:38:42)

Неактивен

 

#5 10.04.2015 09:55:51

Kim
Участник
Зарегистрирован: 31.01.2015
Сообщений: 16

Re: Массивы, update элементов

Все, спасибо, разобрался:

UPDATE `log` SET `text` = INSERT(`text`, 3, 4, 'What')  ;

и не нужны никакие массивы smile

Неактивен

 

#6 10.04.2015 10:36:17

Kim
Участник
Зарегистрирован: 31.01.2015
Сообщений: 16

Re: Массивы, update элементов

rgbeast написал:

BINARY не может быть более 255 символов по определению...

Мне нужно не символов, а байт. Я просто пользовался char'ом и он без проблем вмещал 255 иероглифов в кодировке utf32, что говорит о том, что он может вместить 1020 байт. Вот я и не соображу в чём тут дело, по идее либо я где-то ошибся, либо такого ограничения у binary быть не должно

Неактивен

 

#7 11.04.2015 19:47:29

Kim
Участник
Зарегистрирован: 31.01.2015
Сообщений: 16

Re: Массивы, update элементов

Оказалось для меня это принципиально. Реализовал на varbinary c занулением по умолчанию через DEFAULT '\0\0\0...\0'. Но кто-то через навикат заходит, меняет что-то в таблице, DEFAULT сбрасывается и всё перестает работать.
Поискал в доках MariaDB об ограничении размера binary поля 255 байтами, но ничего не нашел. Подскажите, там тоже 255?

Неактивен

 

#8 12.04.2015 23:01:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Массивы, update элементов

Вроде бы тоже 255. По крайней мере так было, на новой версии надо тестировать, так как в документации действительно нет.

Неактивен

 

#9 13.04.2015 10:41:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Массивы, update элементов

В MariaDB тоже.


MariaDB [test]> select version();
+--------------------+
| version()          |
+--------------------+
| 5.5.34-MariaDB-log |
+--------------------+
1 row in set (0.01 sec)

MariaDB [test]> create table xx (b binary(300));
ERROR 1074 (42000): Column length too big for column 'b' (max = 255); use BLOB or TEXT instead

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson