Son casi exactamente iguales. ip2long a veces devuelve un valor negativo porque PHP usa números con signo para la valoración, mientras que MySQL usa sin firmar.
Ambos se evalúan como x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, pero en PHP, debido al tiempo de firma, mostrará valores negativos para ciertas direcciones IP.
For signed long, the range is
(2^31) - 1 = −2,147,483,648 to +2,147,483,647
Por lo tanto, las direcciones mientras se traducen a más de +2,147,483,647 se ajustarán y darán valores negativos.
ip2long("254.254.254.254"); // -16843010
Este enlace describe esto en detalle.