উত্তর:
স্ট্রিং হিসাবে সংরক্ষণ করবেন না। একটি ব্যবহার করুন int unsigned
কলাম এবং দোকান / দিয়ে উদ্ধার INET_ATON()
এবং INET_NTOA()
যথাক্রমে। আফাইক মাইএসকিএল INET_ * আইপিভি 6 এর জন্য সমর্থন করে না।
মন্তব্য অনুযায়ী সম্পাদনা করুন
সংখ্যায় / থেকে আইপি রূপান্তর করতে ফাংশনে অন্তর্নির্মিত ব্যবহার করে (এবং ডাটাবেসে সেই পূর্ণসংখ্যা সংরক্ষণ করে) সেই আইপিগুলি স্বয়ংক্রিয়ভাবে বৈধ করার পার্শ্ব প্রতিক্রিয়া রয়েছে has বলুন যে আপনি একটি আইপি ভিচারার (16) হিসাবে সঞ্চয় করেছেন, আপনাকে কিছু কাস্টম বৈধতা সহ অবৈধ আইপিগুলি (উদাহরণ হিসাবে 999.999.999.999 এর মতো) সংরক্ষণ না করার বিষয়টি নিশ্চিত করতে হবে। INET_ * ফাংশনগুলি এটি যত্ন করে।
আইপিভি 6 বিবেচনা শুরু করার সম্ভবত এটি সময়। মাইএসকিউএলের আইপিভি 6 অ্যাড্রেসগুলিকে বাইনারি ফর্ম্যাটে রূপান্তর করার পদ্ধতি নেই। চল্লিশ অক্ষরের একটি স্ট্রিং যেকোন সাধারণ আইপিভি 6 অ্যাড্রেস পরিচালনা করবে। এখানে একটি ফর্ম্যাট রয়েছে যা 40 টিরও বেশি অক্ষর ছাড়িয়ে যেতে পারে, আমি অনুশীলনগুলির সম্ভাবনা কম বলে বিবেচনা করব।
আপনি তখন থেকে তথ্যের আকারটি গণনা করতে পারেন যে separa বিভাজক অক্ষরের সাথে সর্বাধিক 8 চারটি অক্ষর গ্রুপ থাকবে। অস্বাভাবিক ফর্ম্যাটটি শেষ দুটি গ্রুপকে একটি আইপিভি 4 ফর্ম্যাট ঠিকানা দিয়ে প্রতিস্থাপন করে। কোনও ঠিকানা সংকোচনের সাথে এটি 15 টি পর্যন্ত অক্ষরের সাথে শেষ 9 টি অক্ষর প্রতিস্থাপন করে।
আপনি যদি ব্লকগুলি সংরক্ষণ করেন, তবে ব্লক আকারের ইঙ্গিতটি IPv4 এর জন্য প্রয়োজনীয় 3 টি অক্ষরের পরিবর্তে 4 টি অক্ষর নিতে পারে।
আপনার প্রাপ্ত বিন্যাসটি সামঞ্জস্যপূর্ণ হওয়া নিশ্চিত করা উচিত তবে আমি যে সমস্ত সফ্টওয়্যার দেখেছি সেগুলি ঠিকানার জন্য সামঞ্জস্যপূর্ণ ফর্ম্যাট দেয়।
আমি পোস্টগ্রিজ এসকিউএল এ মাইগ্রেশন এবং আইএনইটি বা সিআইডিআর ডেটা ধরণের ব্যবহারের পরামর্শ দেব ।
CREATE TABLE test ( test_id serial PRIMARY KEY, address inet );
INSERT INTO test ( address ) VALUES ( '1.2.3.4'::inet );
INSERT INTO test ( address ) VALUES ( 'a:b::c:d'::inet );
SELECT * FROM test;
test_id | address
---------+----------
1 | 1.2.3.4
2 | a:b::c:d
মাইএসকিউএল মেলিং তালিকার একটিতে তৈরি সেরা উত্তর এখানে। পড়ুন শ্রেষ্ঠ Fieldtype IP ঠিকানা সঞ্চয় করতে ... ।
সংক্ষেপে এটি প্রস্তাব করে, যা আমি দ্বিতীয়, INT (10) UNSIGNED ব্যবহার করতে পারি।
সুতরাং, 192.168.10.50 ব্যবহার করে:
(192 * 2 ^ 24) + (168 * 2 ^ 16) + (10 * 2 ^ 8) + 50 = 3232238130 (192.168.10.50 এ ফলাফল)
মাইএসকিউএল এ আপনি সরাসরি ব্যবহার
SELECT INET_ATON('192.168.10.50');
করতে পারেন3232238130
।
অথবা
192 + (168 * 2 ^ 8) + (10 * 2 ^ 16) + (50 * 2 ^ 24) = 839559360 (পিছনে, ফলাফল 50.10.168.192)
মাইএসকিউএল এ আপনি ফিরে আসতে সরাসরি ব্যবহার
SELECT INET_NTOA(3232238130);
করতে পারেন192.168.10.50
।
মাইএসকিউএল v5.6.3 হিসাবে তারা সমর্থন যোগ করেছে INET6_ATON
এবং INET6_NOTA
এটি আইপিভি 4 এবং আইপিভি 6 ঠিকানাগুলির যত্ন নেবে। তবে তারা আর এটি পূর্ণসংখ্যা হিসাবে সঞ্চয় করে না। IPv6 একটি varbinary(16)
এবং IPv4 প্রদান করে a varbinary(4)
।
http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton
আপনি 15 টি পর্যন্ত ছায়াছবি সঞ্চয় করতে পারেন। দয়া করে ভর্চার (15) ব্যবহার করবেন না কারণ এটি 16 বাইট (প্রথম বাইট স্ট্রিংয়ের দৈর্ঘ্য পরিচালনা করে এবং এভাবে ধীরে ধীরে পুনরুদ্ধার এবং স্টোরেজ পরিচালনা করে)। সর্বদা আইপি ঠিকানার মতো কিছুতে CHAR (15) ব্যবহার করুন।
দুঃখিত, উত্তরে মন্তব্য করতে পারবেন না। স্ট্যাকওভারফ্লোতে এটি নিয়ে একটি প্রশ্ন রয়েছে । এবং আমি নির্বাচিত উত্তরের সাথে পুরোপুরি একমত: 2xBIGINT ব্যবহার করা বর্তমানে আইপিভি 6 এর পক্ষে সম্ভবত সেরা উপায়।
আমি 2 * বিগিন্টে যাওয়ার পরামর্শ দিচ্ছি, তবে নিশ্চিত করুন যে তারা নিরবধি রয়েছে। IPv6 এ / 64 ঠিকানার সীমানায় এক ধরণের প্রাকৃতিক বিভাজন রয়েছে (যেহেতু একটি / 64 হ'ল নেটব্লক আকার) তবে এটির সাথে খুব ভালভাবে সারিবদ্ধ হবে।
এই বিগিন্টগুলিতে আইপিভি 4 সংরক্ষণ করাও সম্ভব - তাদের মধ্যে একটিকে নূলে চিহ্নিত করে বা ভি 4COMPAT ফর্ম্যাট ব্যবহার করে