আমার কখন এসএসকিউএল-এ UNSIGNED এবং স্বাক্ষরিত INT ব্যবহার করা উচিত?


103

আমার কখন এসএসকিউএল-এ UNSIGNED এবং স্বাক্ষরিত INT ব্যবহার করা উচিত? কী ব্যবহার করা ভাল বা এটি কেবল ব্যক্তিগত পছন্দ? কারণ আমি এটি এরকম ব্যবহার করতে দেখেছি;

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

এবং

id INT(11) NOT NULL AUTO_INCREMENT

4
নেতিবাচক পিকে খুব বেশি কিছু বোঝা যায় না
ms

উত্তর:


169

UNSIGNEDকেবল ধনাত্মক সংখ্যা (বা শূন্য) সঞ্চয় করে। অন্যদিকে, স্বাক্ষরিত নেতিবাচক সংখ্যা সঞ্চয় করতে পারে (অর্থাত্, নেতিবাচক চিহ্ন থাকতে পারে )।

এখানে প্রতিটি INTEGERধরণের মানের ব্যাপ্তিগুলির সারণি রয়েছে :

মাইএসকিউএল INTEGER প্রকার এবং দৈর্ঘ্য
সূত্র: http://dev.mysql.com/doc/refman/5.6/en/integer-tyype.html

UNSIGNEDথেকে শুরু 0করে n, স্বাক্ষরিত রেঞ্জগুলি প্রায় -n/2থেকে শুরু করে n/2

এই ক্ষেত্রে, আপনার একটি AUTO_INCREMENTআইডি কলাম রয়েছে, সুতরাং আপনার নেতিবাচক হবে না। সুতরাং, ব্যবহার করুন UNSIGNED। আপনি যদি কলামটির UNSIGNEDজন্য ব্যবহার না করেন তবে AUTO_INCREMENTআপনার সর্বাধিক সম্ভাব্য মান অর্ধেক বেশি হবে (এবং মান সীমাটির নেতিবাচক অর্ধেক অব্যবহৃত হবে)।


17
নোট না, তবে, যে UNSIGNEDমাইএসকিউএল-নির্দিষ্ট এবং না একটি প্রমিত এসকিউএল বৈশিষ্ট্য। এর অর্থ UNSIGNEDহ'ল এসকিউএএলএলচেমির মতো স্ট্যান্ডার্ড এসকিউএল লক্ষ্য করে সফ্টওয়্যার লাইব্রেরিগুলি ব্যবহার করার সময় কোনও আলাদা আরডিবিএমএসে ভবিষ্যতের স্থানান্তরকে আরও জটিল করে তুলতে পারে বা অসুবিধার কারণ হতে পারে। আমি মনে করি এটি উত্তরের একটি অংশ হওয়া উচিত।
খনি 20

সেকেন্ডিং @ মাইনজিউ এর মন্তব্য। আমি পাইথনে এসকিউএএলএলকেমি ব্যবহার করছি একটি মাইএসকিউএল ডাটাবেস সহ। আমি বিদেশী কী-বাধাগুলি বরাদ্দ করার সমস্যাগুলি নিয়ে আসছি কারণ পূর্বে তৈরি করা টেবিলগুলিতে UNSIGNED পূর্ণসংখ্যা এবং এসকিউএলচেমির মতো একটি লাইব্রেরি রয়েছে, যা এসকিউএল মান অনুসরণ করে, যদি আপনি মাইএসকিউএল নির্দিষ্ট কোড লেখা শুরু না করেন তবে UNSIGNED কলাম তৈরি করার বিকল্প নেই। এটি এখনও স্কেবলযোগ্য নয় (যেমন ইন্টিগ্রেশন পরীক্ষার জন্য এসকিউএল ডাটাবেস ব্যবহার করা ইত্যাদি) এটি এখনও অবশ্যই ব্যবহারযোগ্য though
মিলারমিডিয়া


4

মূলত এর সাথে UNSIGNED, আপনি পূর্ণসংখ্যার জন্য নিজেকে দ্বিগুণ জায়গা দিচ্ছেন কারণ আপনি স্পষ্টভাবে উল্লেখ করেছেন যে আপনার নেতিবাচক সংখ্যার প্রয়োজন নেই (সাধারণত কারণ আপনার স্টোরের মানগুলি কখনই নেতিবাচক হবে না)।


1

Negativeণাত্মক পূর্ণসংখ্য মানের জন্য, SIGNEDব্যবহৃত হয় এবং অ-নেতিবাচক পূর্ণসংখ্যা মানের UNSIGNEDজন্য ব্যবহৃত হয়। এটি সর্বদা UNSIGNEDপ্রাথমিক কী হিসাবে আইডির জন্য ব্যবহার করার পরামর্শ দেয় ।


1

আমি একমত না না vipin CP

সত্যটি হ'ল প্রথম বিটটি সাইনটি উপস্থাপনের জন্য ব্যবহৃত হয়। তবে 1টি negativeণাত্মক এবং 0 টি ধনাত্মক মানের জন্য। আরও বেশি নেতিবাচক মানগুলি বিভিন্ন উপায়ে কোড করা হয় (দুইটির পরিপূরক)। TINYINT সহ উদাহরণ:

The sign bit
|
1000 0000b = -128d  
...  
1111 1101b = -3d  
1111 1110b = -2d  
1111 1111b = -1d  

0000 0000b = 0d  
0000 0001b = 1d  
0000 0010b = 2d  
...  
0111 1111b = 127d  

0

আমি একটিতে যুক্ত করতে চাই একটি বিষয় signed int, যা এটি default value in mysql, 1 bitপ্রতিনিধিত্ব করতে ব্যবহৃত হবে sign-1 for negative and 0 for positive. সুতরাং যদি আপনার অ্যাপ্লিকেশনটি কেবল ইতিবাচক মান সন্নিবেশ করে তবে এটি স্বাক্ষরবিহীন আরও ভালভাবে উল্লেখ করা উচিত।


0

আপনি যে সংখ্যার সঞ্চয় করতে চলেছেন তা যদি আপনি জানেন তবে আপনার সেই অনুযায়ী চয়ন করতে পারেন। এক্ষেত্রে আপনার 'আইডি' রয়েছে যা কখনই নেতিবাচক হতে পারে না। সুতরাং আপনি স্বাক্ষরবিহীন int ব্যবহার করতে পারেন। স্বাক্ষরিত int এর ব্যাপ্তি: -n / 2 থেকে + n / 2 স্বাক্ষরযুক্ত স্বাক্ষরের প্রান্ত: 0 থেকে n তাই আপনার কাছে ইতিবাচক সংখ্যার দ্বিগুণ উপস্থিত রয়েছে। সেই অনুযায়ী চয়ন করুন।


0

আমি মনে করি, মিনিট বা ঘন্টা বা সেকেন্ডের বিন্যাসে (উদা :) মানের UNSIGNEDমতো কিছু সঞ্চয় করার সর্বোত্তম বিকল্প হতে পারে যা অবশ্যই একটি নেতিবাচক সংখ্যা হবেtime_durationresolved_call_time = resolved_time(DateTime)-creation_time(DateTime)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.