মাইএসকিউএলে জিরোফিলের সুবিধা কী?


168

আমি কেবল জানতে চাই যে ডেটা টাইপের ZEROFILLজন্য সংজ্ঞায়িত করার সুবিধা / ব্যবহার কী?INTMySQL

`id` INT UNSIGNED ZEROFILL NOT NULL 


ভাল প্রশ্ন. সম্পর্কিত প্রশ্নগুলি যা জিজ্ঞাসা করা যেতে পারে: জেরোফিল ব্যবহার না করার কোনও ভাল কারণ আছে? জেরোফিল ব্যবহারের ত্রুটিগুলি এবং সম্ভাব্য সমস্যাগুলি কী কী? সুবিধাগুলি কি ত্রুটিগুলি ছাড়িয়ে যায়?
spencer7593

ব্যাখ্যা দেখুন stackoverflow.com/questions/5634104/...
priyabagus

উত্তর:


254

আপনি যখন টাইপযুক্ত একটি কলামটি নির্বাচন ZEROFILLকরেন এটি কলাম সংজ্ঞায় বর্ণিত ডিসপ্লে প্রস্থ পর্যন্ত শূন্যের সাথে ক্ষেত্রের প্রদর্শিত মানকে প্যাড করে। ডিসপ্লে প্রস্থের চেয়ে লম্বা মানগুলি কাটা হয় না। নোট করুন যে এর ZEROFILLব্যবহারও বোঝায় UNSIGNED

ZEROFILLকীভাবে ডেটা সংরক্ষণ করা হয় তার উপর ব্যবহার এবং ডিসপ্লে প্রস্থের কোনও প্রভাব নেই। এটি প্রদর্শিত হয় কেবল এটি প্রভাবিত করে।

এখানে কয়েকটি উদাহরণ এসকিউএল রয়েছে যা এর ব্যবহারকে প্রদর্শন করে ZEROFILL:

CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;

ফলাফল:

        x          y
 00000001          1
 00000012         12
 00000123        123
123456789  123456789

52
@diEcho: উদাহরণস্বরূপ আপনি যদি চান যে আপনার সমস্ত চালান নম্বরগুলি 10 সংখ্যার সাথে প্রদর্শিত হয় তবে আপনি সেই কলামের প্রকারটি INT (10) ZEROFILL হিসাবে ঘোষণা করতে পারেন।
মার্ক বাইয়ার্স

76
আমি আপনাকে এই বৈশিষ্ট্য থেকে দূরে থাকার জন্য অত্যন্ত পরামর্শ দিচ্ছি - সংখ্যার মানটি কীভাবে প্রদর্শিত / ফর্ম্যাট করা হয় তা উপস্থাপনা উদ্বেগ, এবং একেবারে এমন কিছু নয় যা ডাটাবেস-স্তরের অন্তর্গত; কমপক্ষে আপনি যদি কোনও সফ্টওয়্যার টুকরো সমর্থন করার জন্য ডাটাবেস ব্যবহার করছেন না not সচেতন হন যে এটি সমস্যার কারণ হতে পারে - আপনি যদি একটি পূর্ণসংখ্যার হিসাবে শীর্ষস্থানীয় শূন্যের সাথে কোনও মানকে বিশ্লেষণ করেন তবে অনেক পার্সার মানটিকে অষ্টাল হিসাবে বিবেচনা করবেন, যা সম্ভবত আপনি চান না। আপনার কেবলমাত্র এই বৈশিষ্ট্যটি ব্যবহার করা উচিত, এটি (স্টোরেজ) অপটিমাইজেশন হিসাবে হয়, যখন আপনি আসলে যা সঞ্চয় করছেন তা কার্যকরভাবে অঙ্কগুলির একটি (স্থির দৈর্ঘ্য) স্ট্রিং।
mindplay.dk

3
@ mindplay.dk: নির্ভর করে। আপনি যদি জিটিআইএন এর মতো কিছু সঞ্চয় করে রাখেন তবে সেগুলি 14 ডিজিট দীর্ঘ হতে হবে তবে এটি কেবল 8 টি অঙ্ক এবং বাম-প্যাডযুক্ত জিরো সহ থাকতে পারে। এই ক্ষেত্রে আউটপুট পক্ষের উপর নির্ভর করা ঠিক হবে না, কারণ এটি কেবল দশমিক নয়, তবে একটি কী।
ড্যানম্যান

1
@ মার্কবায়ার্স, ব্যবহারিকভাবে বলতে গেলে যদিও বেশিরভাগ ক্লায়েন্ট-লাইব্রেরিগুলি (যেমন পিএইচপি) অ্যাপ্লিকেশন কোডের কাছে হস্তান্তর করার আগে জিরোগুলি কেবল ছিনিয়ে নেবে না? যদি তা হয় তবে তা সত্যিই কিছুটা অর্থহীন বলে মনে হয়। মাইএসকিউএলের প্রথম দিনগুলিতে একটি খারাপ নকশা।
পেসারিয়ার

131

বুঝতে একটি উদাহরণ, যেখানে ব্যবহারের ZEROFILLআকর্ষণীয় হতে পারে:

জার্মানিতে, আমাদের কাছে 5 ডিজিটের জিপকোড রয়েছে। তবে, এই কোডগুলি একটি জিরো দিয়ে শুরু হতে পারে, তাই 80337মুনিকের জন্য একটি বৈধ 01067পিনকোড, বার্লিনের একটি জিপকোড ।

আপনি যেমন দেখতে পাচ্ছেন যে কোনও জার্মান নাগরিক 5 টি অঙ্কের কোড হিসাবে পিনকোডগুলি প্রদর্শিত হবে বলে আশাবাদী, তাই 1067অদ্ভুত দেখাচ্ছে looks

অর্ডার সেই ডেটা জমা করতে, আপনি একটি ব্যবহার করতে পারে VARCHAR(5)বা INT(5) ZEROFILLযেহেতু zerofilled পূর্ণসংখ্যা দুই বড় সুফল রয়েছে:

  1. হার্ড ডিস্কে স্টোরের স্থান অনেক কম
  2. যদি আপনি sertোকান 1067, আপনি এখনও 01067ফিরে পাবেন

হতে পারে এই উদাহরণটি ব্যবহার বুঝতে সহায়তা করে ZEROFILL


10
এটি যোগ করার মতো যে ডেটা প্রদর্শন করা এসকিউএল ক্লায়েন্ট নেতৃস্থানীয় শূন্যগুলির সাথে সংখ্যার ফর্ম্যাট করার জন্য দায়ী। এটি এমন কিছু নয় যা "স্বয়ংক্রিয়ভাবে" প্রতিটি অ্যাপ্লিকেশনের সাথে ডেটা আঁকানোর জন্য ঘটে।
a_horse_with_no_name

স্থির প্রস্থের কলামগুলি আরও ভাল, কারণ তারা অন ডিস্কের খণ্ডনকে হ্রাস করে।
ড্যানম্যান

@ ফিল, ব্যবহারিকভাবে বলতে গেলে, বেশিরভাগ ক্লায়েন্ট-লাইব্রেরিগুলি (যেমন পিএইচপি) তারা অ্যাপ্লিকেশন কোডের হাতে দেওয়ার আগে জিরোগুলি কেবল ছিনিয়ে নেবে না? যদি তা হয় তবে তা সত্যিই কিছুটা অর্থহীন বলে মনে হয়। মাইএসকিউএলের প্রথম দিনগুলিতে একটি খারাপ নকশা।
পেসারিয়ার

3
@ পেসারিয়ার এটি নির্ভর করে আপনি কীভাবে আপনার ক্লায়েন্ট লাইব্রেরিতে ডেটা উপস্থাপন করতে চান: সংখ্যা হিসাবে বা স্ট্রিং হিসাবে। একটি জার্মান জিপকোড কোনও সংখ্যা নয়, এটি কেবল একটি সংখ্যার সমন্বয়ে একটি স্ট্রিং। সুতরাং আমি মাইএসকিউএলের প্রথম দিনগুলিতে আপনার খারাপ ডিজাইনের বিবৃতিটির সাথে একমত নই। এটি এখনও একটি বৈধ পন্থা তবে বিরল ক্ষেত্রে।
ফিল

61

এটি বিরক্তিকর ব্যক্তিত্বদের জন্য একটি বৈশিষ্ট্য যারা স্কয়ার বাক্স পছন্দ করে।

আপনি .োকান

1
23
123 

তবে আপনি যখন নির্বাচন করেন, এটি মানগুলিকে প্যাড করে

000001
000023
000123

15

এটি আপনাকে একত্রিত করতে হবে এমন ক্ষেত্রে সঠিক বাছাই করতে সহায়তা করে অন্য কিছু (অন্য সংখ্যা বা পাঠ্য) একটি "পাঠ্য" তারপর যেমন সাজানো করা প্রয়োজন হবে যা দিয়ে এই "পূর্ণসংখ্যা"।

উদাহরণ স্বরূপ,

যদি আপনি পূর্ণসংখ্যা ক্ষেত্র সংখ্যা ব্যবহার করতে হবে (ধরুন 5 দিন) ঘনিভূত হিসাবে একটি-005 বা 10/0005


4

আমি জানি আমি পার্টিতে দেরি করেছি তবে আমি দেখতে পেয়েছি যে জিরোফিল টিআইএনআইএনটি (1) এর বুলিয়ান উপস্থাপনার জন্য সহায়ক। নাল সর্বদা মিথ্যা বোঝায় না, কখনও কখনও আপনি এটি চান না। একটি ক্ষুদ্র অঙ্ক জিরোফিলিং দ্বারা, আপনি কার্যকরভাবে সেই মানগুলি INT তে রূপান্তর করতে এবং আপনার অ্যাপ্লিকেশনটির ইন্টারঅ্যাকশন হওয়ার পরে যে কোনও বিভ্রান্তি দূর করতে পারেন। আপনার অ্যাপ্লিকেশন তখন সেই মানগুলিকে আদিম ডেটাটাইপের সাথে একইভাবে আচরণ করতে পারে সত্য = নয় (0)


1
ধন্যবাদ, তবে দুর্ভাগ্যক্রমে আমি কেবল একটি মাইএসকিএল ডিবি-র বিরুদ্ধে কিছু পরীক্ষা চালিয়েছি এবং এটি জিরোফিল নাল মান দেয় না: - /। এই লক্ষ্যটি শূন্য করতে না দেওয়ার জন্য মাঠকে সীমাবদ্ধ করে এখনও সম্পাদিত। আমার সাধারণত ব্যবহার করা ডিবিএস সম্পর্কে প্রশ্নের উত্তর দেওয়ার চেয়ে আরও ভাল জানা উচিত। লোকেরা খুব নিচে নামার আগে আমার উত্তর মুছে ফেলবে। লল
মার্লিন

1
কাজে লাগল? এটা ভুল জিরোফিল যখন প্রদর্শন দৈর্ঘ্য 1 হবে তখন (স্বাক্ষরযুক্ত স্বাক্ষর করা ব্যতীত) কিছুই করে না
ব্রিলিয়ানড

@ মারলিন এবং আপনার সর্বদা সত্য বা মিথ্যা জন্য একটি ডিফল্ট মান নির্ধারণ করা উচিত ... আপনি যদি ডিফল্ট মানগুলি ব্যবহার না করেন তবে আপনি যে সমস্যাটি উল্লেখ করেছেন তা কেবলমাত্র একটিই হতে পারে না ... ননও পাশাপাশি হওয়া আবশ্যক নয় :)
বাকরিয়াবাদ

আমি হ্রাস করব তবে আপনার প্রতিনিধি 666তাই আমি এই উত্তরটি যেমন রাখি তেমন পছন্দ করবো;-)
মার্টিন

3
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tin3;
+----+------------+
| id | val        |
+----+------------+
|  1 | 0000000012 |
|  2 | 0000000007 |
|  4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)

mysql>

mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
|          10 |
+-------------+
1 row in set (0.01 sec)


mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
|     8 |
+-------+
1 row in set (0.00 sec)

1

ERচ্ছিক (নন-স্ট্যান্ডার্ড) অ্যাট্রিবিউট জেরোফিলের সাথে একত্রে ব্যবহৃত হলে স্পেসগুলির ডিফল্ট প্যাডিংটি শূন্যের সাথে প্রতিস্থাপন করা হয়। উদাহরণস্বরূপ, INT (4) জেরোফিল হিসাবে ঘোষিত একটি কলামের জন্য, 5 এর মান 0005 হিসাবে পুনরুদ্ধার করা হবে।

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html


লিঙ্কটি dev.mysql.com/doc/refman/5.0/en/numeric-type-attributes.html পরিবর্তে হবে
18:41 এ আরহাক

1

যদি আপনি একটি সংখ্যাসূচক কলামের জন্য জেরোফিল নির্দিষ্ট করে থাকেন তবে মাইএসকিউএল স্বয়ংক্রিয়ভাবে কলামটিতে UNSIGNED বৈশিষ্ট্য যুক্ত করে।

সংখ্যার ডেটা টাইপগুলি যা UNSIGNED বৈশিষ্ট্যটিকে স্বাক্ষর করে ED যাইহোক, এই ডেটা ধরণেরগুলি ডিফল্টরূপে স্বাক্ষরিত হয়, তাই SIGNED বৈশিষ্ট্যের কোনও প্রভাব নেই।

উপরের বর্ণনাটি এমওয়াইএসকিউএল অফিসিয়াল ওয়েবসাইট থেকে নেওয়া হয়েছে।


0

শূন্য ভরাট

এর মূল অর্থ হ'ল যদি পূর্ণসংখ্যার মান 23 টি 8 প্রস্থের সাথে একটি আইএনটি কলামে প্রবেশ করানো হয় তবে উপলভ্য অবস্থানের বাকী অংশটি স্বয়ংক্রিয়ভাবে জিরো দিয়ে প্যাড হবে।

অত: পর

23

হয়ে:

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