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

Тема в разделе "Базы данных", создана пользователем denik, 6 июн 2013.

Модераторы: latteo
  1. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    Добрый день.

    Переношу базу данных TecDoc в MySQL, и столкнулся там с набором полей *_CTM, тип: bits, размер: 1024.
    В MySQL же, есть тип полей 'bit', максимум в 64 бита. Ровно как и BIGINT (64 bit)

    Думаю в сторону типа данных binary или blob, но как тогда с ним работать в качестве маски?
    Подскажите как лучше быть в этом случае?
     
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    1 запись может принадлежать одной стране? почему не сделать словарь стран и использовать айди страны вместо этого? вам достаточно в таком случае числа 195 (или сколько там стран). TINYINT от нуля до 255

    ну в крайнем случае SMALLINT
    ксли учитывать http://ru.wikipedia.org/wiki/Алфавитный_список_стран_и_территорий
     
  3. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    нет, одна запись может принадлежать как к одной стране ( ...0010000... ) так и ко всем сразу ( ...11111111... ). По-этому и используется битовая маска.
    Конечно, можно хранить вообще все в VARCHAR или TEXT и пользоваться SUBSTRING, для поиска стран... Но это ооочень не правильно, отводить столько места под флаги (когда кол-во записей в БД измеряется миллионами)
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    тогда 1-n таблица для стран, которая будет содержать пары номер записи - айди страны. хотя, в принципе, что есть 1110001001 число всего лишь в двоичном представлении, и вы легко можете даже в коде генерировать правильную маску для поиска превратив число из двоихного в десятичное представление
     
  5. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    хорошо. Вот стран 252 (в тек доке по крайней мере больше не нашел), вот каким числом мне указать первую и последнюю (1000....0001), если максимум в int - это 18446744073709551615 (8 байт)?
     
  6. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    есть запись, скажем с номером 321
    есть две страны, скажем 1 и 252
    есть отдельнная табличка с соотношением запись к стране
    | id | record_id | country_id |
    1 321 1
    2 321 252

    достаточно просто
     
  7. denik

    denik Постоялец

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

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    ну навскидку можна варчаром завалить, и искать потом по 01010101 комбинации, если нужно. но это неправильно немного