Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैक्समाइंड के जियोलाइट 2 को MySQL में आयात करना

network,geoname_id,registered_country_geoname_id,represented_country_geoname_id,is_anonymous_proxy,is_satellite_provider
1.0.0.0/24,2077456,2077456,,0,0
1.0.1.0/24,1814991,1814991,,0,0
1.0.2.0/23,1814991,1814991,,0,0
1.0.4.0/22,2077456,2077456,,0,0

create table thing1
(   network varchar(20) not null,
    geoname_id varchar(20) not null,
    registered_country_geoname_id varchar(20) not null,
    represented_country_geoname_id varchar(20) not null,
    is_anonymous_proxy varchar(20) not null,
    is_satellite_provider varchar(20) not null
);

LOAD DATA INFILE 'c:\\dev\\ipaddr.txt' 
INTO TABLE thing1
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@v1,@v2,@v3,@v4,@v5,@v6)
set network=ifnull(@v1,''),
geoname_id=ifnull(@v2,''),
registered_country_geoname_id=ifnull(@v3,''),
represented_country_geoname_id=ifnull(@v4,''),
is_anonymous_proxy=ifnull(@v5,''),
is_satellite_provider=ifnull(@v6,'');

उपरोक्त मेरे लिए ठीक आया।

नीचे संपादन की शुरुआत

नीचे के लिए, stijn-de-witt<द्वारा किए गए बिंदुओं के बाद इस उत्तर को बेहतर बनाने का प्रयास /ए> टिप्पणियों में।

ध्यान दें कि टिप्पणियों में संदर्भित ब्लॉग में ints में जाने के लिए अद्यतन विवरण में एक त्रुटि थी। तो कुछ समय के लिए जब तक मैं इसे सुलझा नहीं लेता, मुझे एक वर्चर संशोधन मिला जैसा कि नीचे देखा गया है।

संपादित करें1 (अधिक अनुसरण करने के लिए, उत्तर के नीचे टिप्पणी देखें):

Alter the table to get a "from ip to ip range"

alter table thing1 add column from_ip varchar(20), add column to_ip varchar(20);
-- note that those two are nullable at the moment. You can always change that later

वर्चर के लिए अद्यतन तालिका अभी जोड़ी गई है

update thing1
set from_ip=  INET_NTOA(INET_ATON( SUBSTRING_INDEX(network, '/', 1)) 
   & 0xffffffff ^ ((0x1 << ( 32 - SUBSTRING_INDEX(network, '/', -1))  ) -1 )),
to_ip=   INET_NTOA(INET_ATON( SUBSTRING_INDEX(network, '/', 1)) 
   | ((0x100000000 >> SUBSTRING_INDEX(network, '/', -1) ) -1 ))
select * from thing1;

(उपरोक्त अद्यतन विवरण के लिए, इस उत्तर में बर्नड बफेन को श्रेय दें। )

उपरोक्त अद्यतन विवरण के परिणाम:

mysql> select network,from_ip,to_ip from thing1;
+------------+---------+-----------+
| network    | from_ip | to_ip     |
+------------+---------+-----------+
| 1.0.1.0/24 | 1.0.1.0 | 1.0.1.255 |
| 1.0.2.0/23 | 1.0.2.0 | 1.0.3.255 |
| 1.0.4.0/22 | 1.0.4.0 | 1.0.7.255 |
+------------+---------+-----------+

यहां से, MySQL मैनुअल पेज देखें विविध कार्य INET_ATON(expr) . के लिए ।

संपादित करें2 (stijn-de-witt के लिए धन्यवाद फिर से):

alter table thing1 add column uint_from_ip int unsigned, add column uint_to_ip int unsigned;

UPDATE thing1 SET uint_from_ip = inet_aton(SUBSTRING(network, 1, LOCATE('/', network) - 1)), 
uint_to_ip = (inet_aton(SUBSTRING(network, 1, LOCATE('/', network) - 1)) + (pow(2, (32-CONVERT(SUBSTRING(network, LOCATE('/', network) + 1), UNSIGNED INT)))-1));

परिणाम:

select network,from_ip,to_ip,uint_from_ip,uint_to_ip from thing1;
+------------+---------+-----------+--------------+------------+
| network    | from_ip | to_ip     | uint_from_ip | uint_to_ip |
+------------+---------+-----------+--------------+------------+
| 1.0.1.0/24 | 1.0.1.0 | 1.0.1.255 |     16777472 |   16777727 |
| 1.0.2.0/23 | 1.0.2.0 | 1.0.3.255 |     16777728 |   16778239 |
| 1.0.4.0/22 | 1.0.4.0 | 1.0.7.255 |     16778240 |   16779263 |
+------------+---------+-----------+--------------+------------+

(उपरोक्त श्रेय इसे S0BEIT ब्लॉग कुछ सुधारों का उल्लेख करने के बाद)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - मुझे केवल प्रत्येक प्रकार के लिए 3 हिट दें

  2. मैसकल सिंगल क्वेरी 3 टेबल में शामिल हों और सभी परिणाम प्राप्त करें

  3. MySQL में धीमी क्वेरी लॉग को कैसे सक्षम करें

  4. अजगर में mysqldb के साथ पहले ssh

  5. Laravel . में डेटा को प्रभावित किए बिना तालिका योजना अद्यतन कर रहा है