Convertir un UNSIGNED INT en SIGNED INT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Convertir un UNSIGNED INT en SIGNED INT

par Hubert Roksor » 11 août 2006, 01:26

Et bien non, la bonne réponse était*

Code : Tout sélectionner

ALTER table CHANGE ip_range_start ip_range_start BIGINT, ip_range_end ip_range_end BIGINT; UPDATE table SET ip_range_start = ip_range_start - 4294967296 WHERE ip_range_start > 2147483647; UPDATE table SET ip_range_end = ip_range_end - 4294967296 WHERE ip_range_end > 2147483647; ALTER table CHANGE ip_range_start ip_range_start INT, ip_range_end ip_range_end INT;
* à première vue, mais si quelqu'un pense que je me suis planté n'hésitez pas

par graphistnet » 11 août 2006, 01:04

Ne peux tu pas te servir de intval() ?

-553821184 = intval(3741146112)

Convertir un UNSIGNED INT en SIGNED INT

par Hubert Roksor » 10 août 2006, 23:34

J'ai créé une table SQL à partir de la base de données gratuite de GeoIP. La table contient des adresses IP converties en UNSIGNED INT (autrement dit des nombres 32 bits non-signés). J'aimerais les convertir dans un format compatible avec ip2long() et long2ip() (donc 32 bits signés). Je l'ai déjà fait plusieurs fois par le passé mais je n'arrive pas à le retrouver dans mes fichiers, si quelqu'un avait sous la main l'algorithme qui fait ça, ce serait super cool de m'en faire part merci :D

Je vous rappelle le problème. Sous MySQL:

Code : Tout sélectionner

mysql> SELECT INET_ATON('222.253.92.0'); +---------------------------+ | INET_ATON('222.253.92.0') | +---------------------------+ | 3741146112 | +---------------------------+
En PHP
echo ip2long('222.253.92.0');
// => -553821184
Mon but: convertir 3741146112 en -553821184 en SQL pour pouvoir convertir la table avec un simple UPDATE