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


212

মুদ্রা মানগুলির জন্য সেরা এসকিউএল ডেটা টাইপ কী? আমি মাইএসকিউএল ব্যবহার করছি তবে একটি ডাটাবেস স্বাধীন টাইপ পছন্দ করবে prefer


উত্তর:


227

Decimal(19,4)সাধারণত কিছু ক্ষেত্রে বেশিরভাগ ক্ষেত্রে বেশ ভাল কাজ করে। আপনার সঞ্চয় করার জন্য প্রয়োজনীয় সংখ্যার প্রয়োজনের জন্য আপনি স্কেল এবং নির্ভুলতা সামঞ্জস্য করতে পারেন। এমনকি এসকিউএল সার্ভারেও আমি " money" এটি মানহীন হিসাবে ব্যবহার করার প্রবণতা করি না ।


52
আকার সম্পর্কে একটি পয়েন্ট: দুটিই MSDN (অনুযায়ী msdn.microsoft.com/en-us/library/ms187746.aspx তাই), দশমিক (10,4) এবং ডেসিমাল (19,4) উভয় ব্যবহার স্টোরেজ 9 বাইট, যেমন শক্তি সেই অতিরিক্ত 9 অঙ্কের স্কেলের জন্য ভাল বসন্ত।
অ্যাডাম নফসিংগার

1
এমএসডিএন নিবন্ধটি এসকিউএল সার্ভার সম্পর্কে তবে প্রশ্নটি মাইএসকিউএল সম্পর্কে। (আমি ডেভেলপারদের যারা মনে উভয় একই শ্রেষ্ঠ যাতে স্পষ্ট করা হয় পূরণ না।)
cja

5
(19,4)পরিবর্তে ব্যবহার করে কী লাভ (19,2)?
ryvanage

1
আমার উপকারটি এটি ছিল .. নির্দিষ্ট পরিমাণ অর্থের সমান করতে আমার সমস্ত টেবিল সারি প্রয়োজন। ধরা যাক যে পরিমাণটি $ 10.00। নতুন সারি যুক্ত হওয়ার সাথে সাথে প্রতিটি সারির পরিমাণ পরিবর্তন হয়। টেবিলে 3 টি সারি থাকলে। 10/3 = 3.3333333333 ... তবে কেবলমাত্র 2 দশমিক সাথে এগুলি 3.33 হিসাবে সংরক্ষণ করা হয়। সুতরাং আপনি যখন এটিগুলি যোগ করেন, 3.33 + 3.33 + 3.33 = 9.99। আমরা এক পয়সা হারিয়েছি! আরও বড় ডেটাসেটে আরও খারাপ হয়। 19,4 এ স্টোর করুন এবং আপনার মোট পরিমাণগুলি সংগ্রহ করুন, তারপরে আউটপুটটি 19,2 এ পরিণত করুন ..
রিক্স

49

আপনাকে কেবলমাত্র এক নজরে নজর রাখতে হবে যদি আপনি একটি ডাটাবেস থেকে অন্য ডাটাবেসে স্থানান্তরিত হন তবে আপনি দেখতে পাচ্ছেন যে ডেসিমাল (19,4) এবং ডেসিমাল (19,4) অর্থ ভিন্ন জিনিস

( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )

    ডিবিএএসই: 10,5 (10 পূর্ণসংখ্যা, 5 দশমিক)
    এমওয়াইএসকিউএল: 15,5 (15 সংখ্যা, 10 পূর্ণসংখ্যা (15-5), 5 দশমিক)

দুর্ভাগ্যক্রমে লিঙ্কটি এখন মারা গেছে।
মার্কো অরেলিও ডেলিউ

1
@ মার্কোআরেলিওডেলিউ - ওয়েবব্যাক মেশিনে পৃষ্ঠার দিকে ইঙ্গিত করার জন্য আমি লিঙ্কটি পরিবর্তন করেছি, সুতরাং আপনি এটি ২০০৯ সালে ফিরে যেমন দেখতে পেয়েছিলেন তা দেখতে পাবে।
টনি

17

আপনার গণনার জন্য কত দশমিক স্থান প্রয়োজন হতে পারে তা নিয়ে কাজ করাও গুরুত্বপূর্ণ।

আমি একটি শেয়ার মূল্যের অ্যাপ্লিকেশনটিতে কাজ করেছি যার জন্য দশ মিলিয়ন শেয়ারের দামের গণনা প্রয়োজন। উদ্ধৃত শেয়ারের মূল্যটি 7 ডিজিটের যথাযথতায় সংরক্ষণ করতে হয়েছিল।


7
এটি একটি ভাল বিষয় - বিশেষত আর্থিক অ্যাপ্লিকেশনগুলিতে, "দাম" সর্বাধিক "অর্থ" বোঝায় না
মাইক উডহাউস

17

আসফ এর প্রতিক্রিয়া

আপনি কত টাকা পেয়েছেন তার উপর নির্ভর করে ...

আড়ম্বরপূর্ণ শোনাচ্ছে, কিন্তু আসলে এটি পার্টিন্যান্ট।

কেবলমাত্র আজ আমাদের একটি সমস্যা ছিল যেখানে আমাদের রেট সারণীতে একটি রেকর্ড প্রবেশ করানো ব্যর্থ হয়েছিল, কারণ একটি কলাম (গ্রসরেট) দশমিক (11,4) এ সেট করা হয়েছে, এবং আমাদের পণ্য বিভাগ মাত্র কিছু আশ্চর্যজনক রিসর্টে কক্ষের জন্য একটি চুক্তি পেয়েছে বোরা বোরাতে, যা প্রতি রাতে কয়েক মিলিয়ন প্যাসিফিক ফ্রাঙ্কের জন্য বিক্রি হয় ... এমনটি যা 10 বছর আগে ডেটাবেস স্কিমা ডিজাইন করার সময় কখনও প্রতিরোধ করা হয়নি।


2
যে কারণে আমি দশমিক (19,4) সুপারিশ করেছি। ওভারকিলের মতো শোনাতে পারে তবে কখনই জানতে পারবেন না যে কখন আপনাকে এই ক্ষেত্রের মধ্যে খুব বড় পরিমাণে সঞ্চয় করতে হবে।
কিব্বি

2
@ কিব্বি: আমি আজ অবধি আমাদের প্রয়োজনীয়তার জন্য আপনার সাথে একমত হইতাম না। (6 বছরের জন্য (11,4) পুরোপুরি ভাল ছিল ...)
স্কট ফার্গুসন

@ কিব্বি এটি 640 কেবি মেমের মত মনে হচ্ছে :)
নিকিতা বসিক

13

অ্যাকাউন্টিং অ্যাপ্লিকেশনগুলির জন্য মানগুলি পূর্ণসংখ্যারূপে সঞ্চয় করা খুব সাধারণ বিষয় (কিছু লোক এমনকি এটির একমাত্র উপায় হিসাবে বলতেও যায় )। একটি ধারণা পেতে, আপনার প্রয়োজনীয় নির্ভুলতা পেতে লেনদেনের পরিমাণ (ধরুন $ 100.23 ডলার) এবং একাধিক 100, 1000, 10000 ইত্যাদি গ্রহণ করুন। সুতরাং আপনার যদি কেবল সেন্ট সঞ্চয় করতে হয় এবং নিরাপদে উপরে বা নীচে গোল করতে পারেন তবে কেবল ১০০ দিয়ে গুণ করুন my আপনি ডাটাবেসে স্থান বাঁচাতে পারবেন এবং দুটি পূর্ণসংখ্যার তুলনা করা দুটি ফ্লোটের তুলনায় অনেক সহজ। আমার $ 0.02।


আপনি কীভাবে 6.125 (6 1/8) সঞ্চয় করবেন?
পিটারটো দ্য থার্ড

আমার ধারণা তিনি এটিকে একটি পূর্ণসংখ্যা 6125 হিসাবে সংরক্ষণ করবেন
জিমি নট

2
এর চেয়ে ভাল কীভাবে হবে DECIMAL? আপনার যথাযথ সময়ে সবসময় পেনি, কল বা মিলের ডলারে অনুবাদ করার বিষয়ে খুব সতর্ক হওয়া দরকার ।

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

9

সুপার লেট এন্ট্রি তবে জিএএপি হ'ল থাম্বের একটি ভাল নিয়ম ..

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

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

উত্স: মাইএসকিউএলে আর্থিক মান সঞ্চয় করার জন্য সেরা ডেটাটাইপ


5

আপনি DECIMAL(19,2)আপনার সমস্ত আর্থিক মানগুলির জন্য ডিফল্টরূপে কিছু ব্যবহার করতে পারেন তবে আপনি যদি কখনও $ 1000 এর চেয়ে কম মান সংরক্ষণ করেন তবে এটি কেবল মূল্যবান ডাটাবেসের জায়গার অপচয় হবে।

বেশিরভাগ বাস্তবায়নের জন্য, DECIMAL(N,2)পর্যাপ্ত হবে, যেখানে আপনি যে ক্ষেত্রের মধ্যে সঞ্চিত হওয়ার চেয়ে বড় Nঅঙ্কের পূর্বে .প্রত্যাশা করেন তার চেয়ে কমপক্ষে অঙ্কের মান + 5। সুতরাং আপনি যদি কখনও 999999.99 এর চেয়ে বেশি কোনও মান সংরক্ষণ করার DECIMAL(11,2)প্রত্যাশা না করেন তবে পর্যাপ্ত পরিমাণের চেয়ে বেশি হওয়া উচিত (প্রত্যাশাগুলি পরিবর্তিত হওয়া অবধি)।

আপনি যদি জিএএপি অনুগত হতে চান তবে আপনি যেতে পারেন DECIMAL(N,4), যেখানে সেই ক্ষেত্রের মধ্যে সঞ্চিত হওয়ার চেয়ে বড় Nঅঙ্কের আগে কমপক্ষে অঙ্কের মান ।.+ 7


3

এটি ডেটা প্রকৃতির উপর নির্ভর করে। আপনি এটি আগে চিন্তা করা প্রয়োজন।

আমার ক্ষেত্রে

  • দশমিক (13,4) টাকার লেনদেন রেকর্ড করার জন্য স্বাক্ষরবিহীন
    • স্টোরেজ দক্ষ (যাইহোক যাইহোক দশমিক পয়েন্টের প্রতিটি পক্ষের জন্য 4 বাইট) 1
    • GAAP অনুগত
  • দশমিক (19,4) সমষ্টিগুলির জন্য স্বাক্ষরযুক্ত
    • মোট একাধিক বহু বিলিয়ন লেনদেনের জন্য আমাদের আরও স্থান প্রয়োজন
    • এমএস কারেন্সি ডেটা টাইপের সাথে আধা-সম্মতি 2 ক্ষতিগ্রস্থ করবে না
    • এটি রেকর্ডে আরও স্থান নেবে (১১ বাইট - 7 বাম এবং 4 ডান), তবে এটি ঠিক আছে কারণ সমষ্টি 1 এর জন্য কম রেকর্ড রয়েছে
  • বিনিময় হারের জন্য দশমিক (10,5)
    • এগুলি সাধারণত 5 টি সংখ্যার সাথে উদ্ধৃত হয় যাতে আপনি 1.2345 এবং 12.345 এর মতো মান খুঁজে পেতে পারেন তবে 12345.67890 নয়
    • এটি বিস্তৃত কনভেনশন, তবে কোডিং মান নয় (কমপক্ষে আমার দ্রুত অনুসন্ধানের জ্ঞানের কাছে)
    • আপনি একই স্টোরেজ দিয়ে এটি দশমিক (18,9) তৈরি করতে পারেন, তবে ডেটাটাইপ বিধিনিষেধগুলি মূল্যবান অন্তর্নির্মিত বৈধতা প্রক্রিয়া

কেন (এম, 4)?

  • এমন মুদ্রা রয়েছে যা এক হাজার পেনিতে বিভক্ত হয়
  • "ইউনিডাড ডি ফেরমেন্টো", "সিএলএফ" এর মতো অর্থের সমতুল্য 4 টি উল্লেখযোগ্য দশমিক স্থানের সাথে প্রকাশ করা হয় 3 , 4
  • এটি GAAP অনুগত

ভারসাম্য

  • নিম্ন নির্ভুলতা:
    • স্টোরেজ ব্যয় কম
    • দ্রুত গণনা
    • নিম্ন গণনা ত্রুটি ঝুঁকি
    • দ্রুত ব্যাকআপ এবং পুনরুদ্ধার
  • উচ্চতর নির্ভুলতা:
    • ভবিষ্যতের সামঞ্জস্যতা (সংখ্যা বৃদ্ধি হতে থাকে)
    • বিকাশের সময় সাশ্রয় (সীমা পূরণের পরে আপনাকে অর্ধ সিস্টেম পুনর্নির্মাণ করতে হবে না)
    • অপ্রতুল স্টোরেজ যথার্থতার কারণে উত্পাদন ব্যর্থতার ঝুঁকি কম

সামঞ্জস্যপূর্ণ চরম

যদিও মাইএসকিউএল আপনাকে দশমিক (65,30) ব্যবহার করতে দেয়, স্কেলের জন্য 31 এবং নির্ভুলতার জন্য 30 আমাদের সীমাবদ্ধ বলে মনে হয় যদি আমরা স্থানান্তর বিকল্পটি খোলা রাখতে চান।

সর্বাধিক সাধারণ আরডিবিএমএসে সর্বাধিক স্কেল এবং নির্ভুলতা:

            যথার্থ স্কেল
ওরাকল 31 31
টি এসকিউএল 38 38
মাইএসকিউএল 65 30
পোস্টগ্রিএসকিউএল 131072 16383

6 , 7 , 8 , 9

যুক্তিসঙ্গত চরম

  1. কেন (27,4)?
    • জিম্বাবুয়েয়ান ডলার কখন সিস্টেমের প্রয়োজন তা আপনি কখনই জানতে পারবেন না

সেপ্টেম্বর ২০১৫ জিম্বাবুয়ে সরকার জানিয়েছে যে জিম্বাবুয়ে ডলারকে মার্কিন ডলারে ১ মার্কিন ডলার থেকে ৩৫ কোয়াড্রিলিয়ন জিম্বাবুয়ে ডলার ৫ এর বিনিময় করবে

আমরা "হ্যাঁ, নিশ্চিত ... বলার ঝোঁক আছে আমার এমন ক্রেজি ফিগার দরকার হবে না"। আচ্ছা, জিম্বাবুয়েসেরাও তা বলত। খুব বেশি আগে হয়নি।

আসুন কল্পনা করুন আপনার জিম্বাবুয়ে ডলারে 1 মিলিয়ন মার্কিন ডলার লেনদেনের রেকর্ড করা দরকার (আজ সম্ভবত অসম্ভব, তবে এখন থেকে 10 বছরে এটি কেমন হবে কে জানে?)

  1. (1 মিলিয়ন মার্কিন ডলার) * (35 কোয়াড্রিলিয়ন জেডডাব্লুএল) = (10 ^ 6) * (35 * 10 ^ 15) = 35 * 10 ^ 21
  2. আমাদের দরকার:
    • "35" সংরক্ষণ করার জন্য 2 সংখ্যা
    • শূন্যগুলি সংরক্ষণ করার জন্য 21 সংখ্যা
    • দশমিক পয়েন্টের ডানদিকে 4 টি সংখ্যা
  3. এটি দশমিক (27,4) করে তোলে যা প্রতিটি প্রবেশের জন্য আমাদের 15 বাইট খরচ করে
  4. আমরা কোনও ব্যয় ছাড়াই বাম দিকে আরও একটি অঙ্ক যুক্ত করতে পারি - 15 বাইটের জন্য আমাদের দশমিক (28,4) রয়েছে
  5. এখন আমরা জিম্বাবুয়ের ডলারে প্রকাশিত 10 মিলিয়ন মার্কিন ডলার লেনদেন বা হিপারইনফ্লেশনের অন্য স্ট্রাইক থেকে সুরক্ষিত রাখতে পারি, যা আশা করি ঘটবে না

0

যদিও এটি দেরিতে হতে পারে তবে এটি অন্য কারও পক্ষে সহায়ক হবে my আমার অভিজ্ঞতা এবং গবেষণা থেকে আমি দশমিক (১৯,)) জানতে এবং গ্রহণ করতে পেরেছি ph পিএইচপি এবং মাইএসকিএল নিয়ে কাজ করার সময় এটি হয়। বিপুল পরিমাণ অর্থ এবং বিনিময় হারের সাথে কাজ করার সময়

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