MySQL / Большая битовая маска (1024 бит)

denik

Постоялец
Регистрация
1 Июл 2011
Сообщения
80
Реакции
40
Добрый день.

Переношу базу данных TecDoc в MySQL, и столкнулся там с набором полей *_CTM, тип: bits, размер: 1024.
В ТекДоке эти поля отвечают за принадлежность записей к странам, где каждый бит - одна страна.

В MySQL же, есть тип полей 'bit', максимум в 64 бита. Ровно как и BIGINT (64 bit)

Думаю в сторону типа данных binary или blob, но как тогда с ним работать в качестве маски?
Подскажите как лучше быть в этом случае?
 
1 запись может принадлежать одной стране? почему не сделать словарь стран и использовать айди страны вместо этого? вам достаточно в таком случае числа 195 (или сколько там стран). TINYINT от нуля до 255

ну в крайнем случае SMALLINT
ксли учитывать Для просмотра ссылки Войди или Зарегистрируйся
 
1 запись может принадлежать одной стране? почему не сделать словарь стран и использовать айди страны вместо этого? вам достаточно в таком случае числа 195 (или сколько там стран). TINYINT от нуля до 255

ну в крайнем случае SMALLINT
ксли учитывать Для просмотра ссылки Войди или Зарегистрируйся

нет, одна запись может принадлежать как к одной стране ( ...0010000... ) так и ко всем сразу ( ...11111111... ). По-этому и используется битовая маска.
Конечно, можно хранить вообще все в VARCHAR или TEXT и пользоваться SUBSTRING, для поиска стран... Но это ооочень не правильно, отводить столько места под флаги (когда кол-во записей в БД измеряется миллионами)
 
нет, одна запись может принадлежать как к одной стране ( ...0010000... ) так и ко всем сразу ( ...11111111... ). По-этому и используется битовая маска.
Конечно, можно хранить вообще все в VARCHAR или TEXT и пользоваться SUBSTRING, для поиска стран... Но это ооочень не правильно, отводить столько места под флаги (когда кол-во записей в БД измеряется миллионами)
тогда 1-n таблица для стран, которая будет содержать пары номер записи - айди страны. хотя, в принципе, что есть 1110001001 число всего лишь в двоичном представлении, и вы легко можете даже в коде генерировать правильную маску для поиска превратив число из двоихного в десятичное представление
 
тогда 1-n таблица для стран, которая будет содержать пары номер записи - айди страны. хотя, в принципе, что есть 1110001001 число всего лишь в двоичном представлении, и вы легко можете даже в коде генерировать правильную маску для поиска превратив число из двоихного в десятичное представление

хорошо. Вот стран 252 (в тек доке по крайней мере больше не нашел), вот каким числом мне указать первую и последнюю (1000....0001), если максимум в int - это 18446744073709551615 (8 байт)?
 
хорошо. Вот стран 252 (в тек доке по крайней мере больше не нашел), вот каким числом мне указать первую и последнюю (1000....0001), если максимум в int - это 18446744073709551615 (8 байт)?
есть запись, скажем с номером 321
есть две страны, скажем 1 и 252
есть отдельнная табличка с соотношением запись к стране
| id | record_id | country_id |
1 321 1
2 321 252

достаточно просто
 
есть запись, скажем с номером 321
есть две страны, скажем 1 и 252
есть отдельнная табличка с соотношением запись к стране
| id | record_id | country_id |
1 321 1
2 321 252

достаточно просто

я Вас примерно понял, однако это не совсем то... Потому что я переношу БД, а не создаю. Там слишком много этих полей (в каждой таблице практически присутствуют).
Наверно еще поколупаюсь с binary или varbinary...
 
я Вас примерно понял, однако это не совсем то... Потому что я переношу БД, а не создаю. Там слишком много этих полей (в каждой таблице практически присутствуют).
Наверно еще поколупаюсь с binary или varbinary...
ну навскидку можна варчаром завалить, и искать потом по 01010101 комбинации, если нужно. но это неправильно немного
 
Назад
Сверху