За последние 24 часа нас посетили 21811 программистов и 1009 роботов. Сейчас ищут 732 программиста ...

уникальность md5

Тема в разделе "Вопросы от блондинок", создана пользователем joost, 27 июл 2008.

  1. joost

    joost Guest

    1. md5 дает на 100% уникальное значение?
    2. в БД записываю ключевым полем md5 от строки - в базу пишет какието числа не 16-тиричные. почему? будут ли они уникальны?

    Актуальный вопрос топика

    Создаю для текстового поля уникальный индекс.
    Уникальным индексом для него будет md5() от этого текстового поля.
    В БД уникальным индексом записываю md5() от этого текстового поля, но в БД записывается число не то которое создает md5() (не число в 16-тиричнойсистеме ) от даного текстового значения.
    Вопрос
    1. Что за число записывается в таблицу БД?
    2. Будет ли это число уникальным?
     
  2. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
  3. joost

    joost Guest

    Hight
    по первому вопросу ясно!
    Спасибо!

    А как по второму?
     
  4. Anonymous

    Anonymous Guest

    joost
    ну так ты покажи их... и покажи, чего пытаешься писать.
     
  5. joost

    joost Guest

    md5 от строки дает
    Код (Text):
    1. 32ac521980a1d6663ea2eb969bbf6c06
    а в таблицу БД записывает какое-то число. почему число? будет ли это число уникальным?[/quote]
     
  6. Anonymous

    Anonymous Guest

    какое? ри какой строки?
     
  7. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    какой тип столбца, куда пытаетесь записать? :)
     
  8. joost

    joost Guest

    bigint(20)
    таблица Mysql
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Потому что md5 - число. Если хочешь записать его как есть в виде строки, то тип поля сделай CHAR (32).
     
  10. joost

    joost Guest

    Sergey89
    знаю, что число в 16 системе.
    но в таблицу Mysql при bigint(20) записывает не 16 ричным числом. почему? записывате обычным. мускул сам автоматом переводит из 16 ричной системы в 10 ричную?
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Какая разница в какой системе?
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    joost
    Может 20 знаков не хватает?
     
  13. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    ну в принципе если посчитать...
    хеш md5 - это 128 бит.
    bigint - 63 бита (и один знаковый).

    оно влезет? :)

    ЗЫ bigint(20) - 20 это колво знаков отображаемое в какой нибудь консольке, если не ошибаюсь.
     
  14. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    20 - это когда установлен ZEROFILL, то число будет дополняться слева нулями до этого числа знаков.
     
  15. joost

    joost Guest

    так будут уникальными числа, которые записываются в таблицу?
     
  16. Anonymous

    Anonymous Guest

    на 100% гарантии нет.
     
  17. joost

    joost Guest


    влезет или нет?
    как увеличить bigint?
     
  18. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    чобы влезло не надо заниматься ерундой, а заюзать varchar
    в пхп и так типы размыты, проще некуда
     
  19. joost

    joost Guest

    antonn
    зачем мне varchar? если мне нужен уникальный индекс для текстовых данных.
     
  20. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Не varchar, a char(32). Не нужно использовать варчары там, где можно чары ;)
    joost, уникальный индекс можно и по char-у построить.
     
  21. joost

    joost Guest

    как?


    а больше чем 32 можно?
     
  22. dAllonE

    dAllonE Guest

    [sql]
    ALTER TABLE `table_name` ADD UNIQUE (`field_name`)
    [/sql]

    А смысл? md5 влезает в char(32) отлично
     
  23. joost

    joost Guest

    а если это текст? какой уникальный индекс может быть?
     
  24. dAllonE

    dAllonE Guest

    joost, уникальный индекс по большому тексту делать не рекомендую а Сhar(32) он вполне схавает.

    Да самый обыкновенный... Мы быть может друг друга не понимаем? Под `field_name` подразумевалось имя столбца по которому создаетмся уникальный индекс...