মাইএসকিউএলে মান মান সংরক্ষণ করার জন্য সেরা ডেটা টাইপ


279

আমি একটি মাইএসকিউএল ডাটাবেসে অনেক রেকর্ড সঞ্চয় করতে চাই। তাদের সকলের মধ্যে অর্থের মূল্য রয়েছে। তবে আমি জানি না প্রত্যেকটির জন্য কতগুলি সংখ্যা .োকানো হবে।
এই উদ্দেশ্যে আমাকে কোন ডেটা টাইপ ব্যবহার করতে হবে?
ভর্চার বা আইএনটি (বা অন্যান্য সংখ্যার ডেটা টাইপ)?


13
deimal(10,2)আমি যা ব্যবহার করি তা হ'ল ... আপনি প্রত্যাশিত আকারের উপর নির্ভর করে মানগুলি সামঞ্জস্য করতে পারেন
মানসে

9
সম্পর্কিত প্রশ্ন মুদ্রার জন্য সেরা ডেটা প্রকার ;)।
shA.t

উত্তর:


370

যেহেতু অর্থের জন্য সঠিক প্রতিনিধিত্বের প্রয়োজন হয় এমন ডেটা টাইপগুলি ব্যবহার করবেন না যা কেবল আনুমানিক মতো float। আপনি পছন্দ করতে একটি নির্দিষ্ট পয়েন্ট সংখ্যার তথ্য টাইপ ব্যবহার করতে পারেন

decimal(15,2)
  • 15 নির্ভুলতা (দশমিক স্থান সহ মানের মোট দৈর্ঘ্য)
  • 2 দশমিক বিন্দুর পরে অঙ্কের সংখ্যা

দেখুন মাইএসকিউএল সাংখ্যিক প্রকারভেদ :

সঠিক নির্ভুলতা সংরক্ষণ করা গুরুত্বপূর্ণ যখন এই ধরণের ব্যবহার করা হয়, উদাহরণস্বরূপ আর্থিক তথ্য সহ।


3
এই ক্ষেত্রে দশমিক এবং সংখ্যার ডেটা টাইপের মধ্যে পার্থক্য কী হতে পারে?
এমিলিও গোর্ট

60
মাইএসকিউএল এ decimalএবং numericএকই রকম।
জুরজান d

21
আমি ব্যক্তিগতভাবে numeric(19,4)আর্থিক রেকর্ডগুলির জন্য ব্যবহার করি যা আপনাকে নতুন অনুরোধগুলি খেলতে এবং সহজেই গ্রহণ করতে আরও ভাল হাত দেয়।
ইয়াহইয়া

10
আমি ইয়াহিয়াইয়ের সাথে একমত, আরও দশমিক দশমিক আরও ভাল। কিছু মুদ্রা রয়েছে যা সাধারণত 3 দশমিক স্থান ব্যবহার করে যেমন বাহরাইন, জর্ডানিয়ান, বা কুয়েতি দিনারস, তাই আপনার কমপক্ষে 3 টি দরকার need চার বা পাঁচটি আরও ভাল।
এডউইন হুগরবিটস

1
@ এডউইন হুগারবিটস হিসাবরক্ষক হচ্ছেন না ... তবে যুক্তরাজ্যে একটি ছোট্ট বিজ চালাচ্ছেন ... আমার মনে আছে অনেক আগেই কোথাও পড়া হয়েছিল যে মুদ্রার পরিসংখ্যানগুলি এমনকি £, $ ইত্যাদির জন্যও 4 দশমিক দশকে সংরক্ষণ করা উচিত যাতে নির্দিষ্ট গণনাগুলি হতে পারে আসলে ব্যবহার নির্দিষ্ট অস্পষ্ট অ্যাকাউন্টিং প্রেক্ষিতে গত 2 দশমিক স্থান। নিশ্চিত / খণ্ডন করতে ডাব্লুডির একটি অ্যাকাউন্টেন্ট দরকার।
মাইকে রডেন্ট

88

আপনি ব্যবহার করতে পারেন DECIMALবা NUMERICউভয় একই

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

অর্থাত DECIMAL(10,2)

উদাহরণ সেটিংস

ভাল পড়া


3
বিভ্রান্তিকর হতে পারে তবে আপনার স্ক্রিনশটটি আপনার উত্তর পাঠ্যের সাথে (যথাযথতা, স্কেল) মেলে না।
প্যাট্রিক হফম্যান

আমি আমার অর্থের জন্য দশমিক (10,2) ব্যবহার করছি, তবে আমি যখন 867,000.00 এর মতো কিছু রাখি তখন এটি 867 হিসাবে সংরক্ষণ হয় I আমি কী ভুল করছি?
কোডিনগ্রোগ্রেস

32

আমি 100 ব্যবহার BIGINTকরে মানগুলি ব্যবহার করতে পছন্দ করি এবং মানগুলি সংরক্ষণ করি , যাতে এটি পূর্ণসংখ্যায় পরিণত হয়।

উদাহরণস্বরূপ, এর মুদ্রার মান উপস্থাপনের 93.49জন্য মানটি সংরক্ষণ করা হবে 9349, যখন মানটি আমরা ১০০ দিয়ে ভাগ করে প্রদর্শন করতে পারি। এটি কম সঞ্চয় স্থান দখল করবে।

সাবধানতা:
বেশিরভাগ ক্ষেত্রে আমরা currency * currencyগুণগুলি করি না , যদি আমরা এটি করে যাচ্ছি তবে ফলাফলটি 100 এবং স্টোর দিয়ে ভাগ করুন, যাতে এটি যথাযথ নির্ভুলতায় ফিরে আসে।


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

11
লাভ কী DECIMAL? আপনি পেনিগুলিকে ডলারে অনুবাদ করার প্রয়োজন তৈরি করেন এবং হায় আফসোস যদি আপনি কোনও সময় এটি ভুলে যান।

1
স্থান হ'ল একমাত্র সুবিধা, তবে হ্যাঁ আমরা এই বৈশিষ্ট্যটি ব্যবহার করার সময় আমাদের আরও সতর্ক হওয়া দরকার।
দিনেশ পিআর

4
যদি এটি সুস্পষ্ট না হয়: আপনি যদি ভগ্নাংশ সেন্টে অর্থ সঞ্চয় করেন তবে স্কেল অপসারণের পদ্ধতিটি ব্যবহারের বিষয়ে সতর্ক থাকুন (উদাহরণস্বরূপ, $0.005বা $0.12345) কারণ তারা 100 দ্বারা গুণফলের পরে কোনও পূর্ণসংখ্যায় হ্রাস পাবে না you আপনি যদি মানগুলির যথার্থতা জানেন তবে এটি পরিষ্কার clear সেরা বিকল্প ব্যবহার করা হয় DECIMAL। তবে আপনি যদি সঠিকতাটি জানেন না (যেমন আমার উদাহরণগুলিতে) তবে ... FLOATউপযুক্ত হবে?
কুইন কমেন্ডেন্ট

1
জাভাস্ক্রিপ্টের মতো ভাষা ব্যবহার করে যখন ভাসমান পয়েন্ট সংখ্যা সংরক্ষণ করতে আইইইই -754 ব্যবহার করে তখন এই পদ্ধতির একটি সুবিধা আসে। এই স্পেসিফিকেশন গ্যারান্টি দেয় না যে 0.1 + 0.2 === 0.3 সত্য is পূর্ণসংখ্যা হিসাবে মুদ্রা সংরক্ষণ করা নিশ্চিত করে যে আপনার অ্যাপ্লিকেশনটিতে এই ধরণের ত্রুটি ঘটবে না। যদিও এটি সেরা সমাধান নাও হতে পারে। সমাধানগুলি গবেষণা করার সময় আমি এই পৃষ্ঠায় পৌঁছেছি এবং আমি এখনও সম্পন্ন করি নি।
গ্যারি অট

27

এটি আপনার প্রয়োজনের উপর নির্ভর করে।

DECIMAL(10,2)সাধারণত ব্যবহার করা যথেষ্ট তবে আপনার যদি আরও কিছুটা সুনির্দিষ্ট মান প্রয়োজন হয় তবে আপনি সেট করতে পারেন DECIMAL(10,4)

আপনি কাজ সাথে বড় মান প্রতিস্থাপন তাহলে 10সঙ্গে 19


আমি আমার অর্থের জন্য দশমিক (10,2) ব্যবহার করছি, তবে আমি যখন 867,000.00 এর মতো কিছু রাখি তখন এটি 867 হিসাবে সংরক্ষণ হয় I আমি কী ভুল করছি?
কোডিনগ্রোগ্রেস

2
@ কোডেনপ্রোগ্রেস ভুল লোকেল / দশমিক বিভাজক ব্যবহার করছেন?
ডেভিড বালাইচ

15

যদি আপনার অ্যাপ্লিকেশনটিতে ট্রিলিয়ন পর্যন্ত অর্থের মানগুলি পরিচালনা করতে হয় তবে এটি কাজ করা উচিত: 13,2 যদি আপনাকে GAAP (সাধারণত স্বীকৃত অ্যাকাউন্টিং নীতিমালা) মেনে চলতে হয় তবে ব্যবহার করুন: 13,4

সাধারণত আপনার আউটপুট 13,2 এ গোল করার আগে আপনার অর্থের মান 13,4 এ যোগ করা উচিত।


5
আপনি বিটকয়েন নিতে যাচ্ছে করছেন, তাহলে আপনি যা প্রয়োজন 8 দশমিক স্থান যাচ্ছেন, যদিও অধিকাংশ ওয়ালেট mBTC যেতে 3 en.wikipedia.org/wiki/Bitcoin
খ্রিস্টান

এই উত্তরটি সত্য বলে মনে করবেন না। opendata.stackexchange.com/a/10348/13983 @ david.ee যে জন্য একটি উৎস আছে?
ইভান ক্যারল

@ ইভানক্রোল আমাকে ডেভিড.ইয়ের জন্য উত্তর দিন। আমি মনে করি এই নিবন্ধটি উত্স হতে পারে rietta.com/blog/2012/03/03/best-data-types-for-currencymoney-in
naXa

@naX লিঙ্কটি এমন কোনও উত্স থেকে উদ্ধৃত করে না যা GAAP এর জন্য 13,4 ব্যবহারের দাবি সমর্থন করে। আপনি যা করেছিলেন তা হ'ল একটি নিবন্ধের লিঙ্ক ছিল যা একই অনাবশ্যক দাবি করে।
ইহানেই

6

প্রকৃতপক্ষে এটি প্রোগ্রামারের পছন্দগুলিতে নির্ভর করে। আমি ব্যক্তিগতভাবে ব্যবহার করি: সাধারণভাবে গৃহীত অ্যাকাউন্টিং নীতিমালা ( জিএএপি )numeric(15,4) মেনে চলার জন্য ।


5
"প্রোগ্রামারটির পছন্দগুলি" বা আপনি 'ব্যক্তিগতভাবে কী ব্যবহার করেন' তার সাথে এর কিছুই করার নেই। এটি সমস্যা ডোমেন দ্বারা নির্ধারিত হয়, যার জন্য দশমিক দশমিক requires এটি এমন কোনও বিষয় নয় যাতে প্রোগ্রামার তার নিজস্ব ব্যক্তিগত পছন্দগুলি অনুশীলন করতে পারে।
মার্নকুইস লর্ন

3

ব্যবহার করার চেষ্টা করুন

Decimal(19,4)

এটি সাধারণত প্রতিটি অন্যান্য ডিবিতেও কাজ করে


3

আমরা ব্যবহার double

* খাবি *

কেন?

কারণ এটি দশমিক পয়েন্ট যেখানে রয়েছে তাতে কোনও বাধা ছাড়াই যে কোনও 15 ডিজিটের সংখ্যা উপস্থাপন করতে পারে । সবগুলি একটি পরিমাপের জন্য 8 বাইট!

সুতরাং এটি উপস্থাপন করতে পারেন:

  • 0.123456789012345
  • 123456789012345.0

... এবং এর মধ্যে কিছু।

এটি কার্যকর কারণ আমরা বৈশ্বিক মুদ্রাগুলি নিয়ে কাজ করছি এবং doubleআমরা যে সংখ্যক দশমিক জায়গার মুখোমুখি হব তা সঞ্চয় করতে পারি store

একটি একক doubleক্ষেত্র জাপানি দশকে 999,999,999,999,999, মার্কিন ডলারে 9,999,999,999,999.99 এবং এমনকি বিটকয়েনগুলিতে 9,999,999.99999999s উপস্থাপন করতে পারে

আপনি যদি এটির সাহায্যে একই চেষ্টা করে থাকেন তবে আপনার 14 বাইটের মূল্য decimalপ্রয়োজন decimal(30, 15)

আদেশ সহকারে

অবশ্যই, ব্যবহার doubleকরা সতর্কতা ছাড়াই নয়।

তবে কারও কারও মতে প্রবণতা হওয়ায় এটি নির্ভুলতার ক্ষতি হয় না । যদিও doubleনিজেই বেস 10 সিস্টেমের অভ্যন্তরীণভাবে নির্ভুল নাও হতে পারে , আমরা ডাটাবেস থেকে তার যে দশমিক দশমিক স্থানে টানছি তার মানকে গোল করে এটি সঠিক করে তুলতে পারি । প্রয়োজনে তা হয়। (যেমন যদি এটি আউটপুট করা হয়, এবং বেস 10 এর উপস্থাপনা প্রয়োজন required)

সাবধানবাণীগুলি হ'ল, যে কোনও সময় আমরা এটির সাথে পাটিগণিত সম্পাদন করি, তার আগে আমাদের ফলাফলটি স্বাভাবিক করতে হবে (এর গুরুত্বপূর্ণ দশমিক স্থানে গোল করে):

  1. এটিতে তুলনা করা।
  2. এটি ডাটাবেসে ফিরে লেখা।

আর এক ধরণের সতর্কতাই হ'ল, decimal(m, d)যেখানে ডেটাবেস প্রোগ্রামগুলির mসংখ্যাগুলির চেয়ে বেশি সংখ্যক সংখ্যা সন্নিবেশ করা থেকে বিরত রাখে , এর সাথে এই জাতীয় কোনও বৈধতা উপস্থিত নেই double। একটি প্রোগ্রাম 20 ডিজিটের কোনও ব্যবহারকারীকে ইনপুট করা মান couldোকাতে পারে এবং এটি চুপচাপ একটি ভুল পরিমাণ হিসাবে রেকর্ড হয়ে যায়।


প্রথমবার আমি এর মতো উত্তর দেখেছি, আকর্ষণীয়। প্রশ্ন: আমি যদি ডাটাবেজে 1.41 এর মতো একটি ফ্লোট লিখি এবং কোনও কারণে আমার এটি 1000+000.000.000 এর মতো মাইএসকিএলে কিছু বিশাল সংখ্যার দ্বারা গুণ করতে হবে। বৃত্তাকার ফলাফলটি কি ঠিক হবে: 1.410.000.000.000?
রোয়েলর

@ রিয়েল্লোর ফলাফলটি ঠিক 1,410,000,000,000 (হাজার হাজার বিভাজক হিসাবে কমা) হওয়ার জন্য ইনপুটটিকে 1.410000000000(বারোটি উল্লেখযোগ্য দশমিক স্থান) বলে ধরে নেওয়া হয় , তবে এটির গুণফলকে 1,000,000,000,000 (যা দশমিক পয়েন্টের 13 টি উল্লেখযোগ্য সংখ্যা বাকি) এর অর্থ আমরা এর সাথে কাজ করছি কমপক্ষে একটি তাত্পর্যপূর্ণ 25 সংখ্যা। এটি এতদূর দ্বিগুণ জন্য উপলব্ধ 15 কে ছাড়িয়ে যায়, তাই নকশা অনুযায়ী আমি মনে করি এটি খুব ভাঙ্গা হবে।
এন্টাক

2

এই সময় জিজ্ঞাসা করা হয়েছিল বিটকয়েনের দাম সম্পর্কে কেউ ভাবেনি। বিটিসির ক্ষেত্রে এটি সম্ভবত ব্যবহারের পক্ষে অপর্যাপ্ত DECIMAL(15,2)। বিটকয়েন যদি 100,000 ডলার বা তারও বেশি বেড়ে DECIMAL(18,9)যায় তবে আমাদের অ্যাপ্লিকেশনগুলিতে কমপক্ষে আমাদের ক্রিপ্টোকারেন্সি সমর্থন করতে হবে ।

DECIMAL(18,9)মাইএসকিউএল-তে 12 বাইট স্পেস লাগে ( 9 টি প্রতি প্রতি 4 বাইট )।


> একটি বিটকয়েনকে 8 দশমিক জায়গায় ভাগ করা যায়। অতএব, 0.00000001 বিটিসি হ'ল একটি লেনদেনের মধ্যে পরিচালিত সবচেয়ে ক্ষুদ্রতম পরিমাণ। আমি মনে করি আপনি 9 এর পরিবর্তে 8 মানে?
বিপদ 89

1
আমি জানি, তবে 9 টি একই ডিস্কের স্থানটি 8 হিসাবে গ্রহণ করে My মাইএসকিউএল ডক্স থেকে: "ডেসিমাল কলামগুলির জন্য মানগুলি বাইনারি ফর্ম্যাট ব্যবহার করে সংরক্ষণ করা হয় যা নয় দশমিক
অঙ্ককে

আফসোস, এখন আমি আপনাকে পেয়েছি। ধন্যবাদ।
বিপদ 89

2

BIGINTকম সঞ্চয় স্থান ব্যবহারের কারণে 100 বা তার বেশি সংখ্যক হিসাবে অর্থ সঞ্চয় করা সমস্ত "স্বাভাবিক" পরিস্থিতিতে কোনও ধারণা রাখে না।

  • GAAP এর সাথে সারিবদ্ধ থাকার জন্য এটি মুদ্রাগুলি সঞ্চয় করার পক্ষে যথেষ্ট DECIMAL(13,4)
  • মাইএসকিউএল ম্যানুয়ালটি পড়েছে যে এটি সঞ্চয় করতে 9 ডিজিটে 4 বাইট দরকার DECIMAL
  • DECIMAL(13,4) 9 সংখ্যার + 4 ভগ্নাংশের সংখ্যা (দশমিক স্থান) => 4 + 2 বাইট = 6 বাইট উপস্থাপন করে
  • 8 টি বাইট সংরক্ষণের জন্য তুলনা করুন BIGINT

1

যদি GAAP সম্মতি প্রয়োজন হয় বা আপনার 4 দশমিক স্থানের প্রয়োজন:

নির্ধারণ (13, 4) যা সর্বাধিক মান সমর্থন করে:

$ 999,999,999.9999

অন্যথায়, যদি 2 দশমিক স্থান যথেষ্ট হয়: ডেসিমাল (13,2)

src: https://rietta.com/blog/best-data-tyype-for-currencymoney-in/


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