alhames.ru
И сразу второй вопрос, пока не забыл)
Как хранить IP в базе данных?
Лично я использовал функции ip2long() и long2ip(), но проблема заключается в том, что я понятия не имею какой тип поля задать. В INT все ip-шники врятли вместятся, а INT UNSIGNED задать не могу, т.к. к примеру ip2long('255.255.255.255') == -2. Пока что поставил BIGINT, но тут явно запас слишком большой..
Нашел вот такой материал:
Для хранения IP в базе воспользуйтесь двумя функциями, INET_ATON что бы добавить
SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-- 2130706433, 2130706433
и INET_NTOA что бы получить
SELECT INET_NTOA(3520061480);
-- '209.207.224.40'
или выбрать промежуток
SELECT * FROM Sessions WHERE ip_address
BETWEEN INET_ATON('192.168.0.1') AND INET_ATON('192.168.0.255');
PS: поле под ip_address должно быть int
Но что-то недопонял - командой SELECT добавить?? И даже если так, то куда она в приведенных примерах будет записывать ip?
Как хранить IP в базе данных?
Лично я использовал функции ip2long() и long2ip(), но проблема заключается в том, что я понятия не имею какой тип поля задать. В INT все ip-шники врятли вместятся, а INT UNSIGNED задать не могу, т.к. к примеру ip2long('255.255.255.255') == -2. Пока что поставил BIGINT, но тут явно запас слишком большой..
Нашел вот такой материал:
Для хранения IP в базе воспользуйтесь двумя функциями, INET_ATON что бы добавить
SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-- 2130706433, 2130706433
и INET_NTOA что бы получить
SELECT INET_NTOA(3520061480);
-- '209.207.224.40'
или выбрать промежуток
SELECT * FROM Sessions WHERE ip_address
BETWEEN INET_ATON('192.168.0.1') AND INET_ATON('192.168.0.255');
PS: поле под ip_address должно быть int
Но что-то недопонял - командой SELECT добавить?? И даже если так, то куда она в приведенных примерах будет записывать ip?
Потому что возможность агрегировать адреса пользователя и производить поиск мультиботов гораздо важнее и полезнее чем выбор адресов по маске.
CHAR(15) - если побыстрее
Ладно, наверное я тож так поступлю, пока приведенные выше функции не доработают до ума +)
Советую, как и многие остальные, VARCHAR . И вообще пиво будет получше MYSQL, так что делайте все на пиве.
Ага)
Объясните непросвешенному зачем хранить адреса в таблице в виде чисел?
Экономия байтов)
Пока в базе 100 строк - да.
Как будет 10000 - ты за эти байты глотку кому хочешь перегрызешь.
Знаю по опыту: сверхоптимизация (и в первую очередь в плане MySQL) способна уменьшить нагрузку, оказываемую порталом на сервер, в 3 раза.
Командой SELECT делают выборку из таблицы, добавляют командой INSERT IGNORE, правят командой UPDATE
Командой SELECT делают выборку из таблицы, добавляют командой INSERT IGNORE, правят командой UPDATE
Ды я и сам это прекрасно знаю, поэтому и удивился, почему "добавляют" SELECT'ом.. Хотя судя по комментариям опечатки не было.
Выборка и сравнение int и varchar - в последнем случае врятли вы занимали каким-нибудь серьезным проектом. Иначе бы не допускали такого. Может, вы ещё и индексы не ставите и об их существовании не догадываетесь? И длины оставляете дефолтными?
Жаль, жаль.
Экономия на спичках до тех пор экономия на спичках, пока проект ваш - максимум хомпага кошки или страничка универа, сделанная для информатика по поводу купленной "пыхыпы для чайников".
В high load проектах будешь жопу рвать из-за нескольких байтов, которые могут означать ресурсов во много раз выше мощности вашего домашнего компьютера.