আমি মাইএসকিউএল এবং পোস্টগ্রেএসকিউএল সম্পর্কে জানি না, তবে আমাকে এটিকে কিছুটা সাধারণভাবে আচরণ করতে দিন।
ওরাকল নামে একটি ডিবিএমএস রয়েছে যা এটি NUL এবং '' এর মধ্যে ব্যবহারকারীদের বেছে নিতে দেয় না। এটি স্পষ্টতই প্রমাণ করে যে উভয়ের মধ্যে পার্থক্য করা প্রয়োজন নয়। কিছু বিরক্তিকর পরিণতি রয়েছে:
আপনি একটি খালি স্ট্রিংয়ের জন্য একটি ভারচার 2 সেট করেছেন:
Update mytable set varchar_col = '';
নিম্নলিখিত একই ফলাফল বাড়ে
Update mytable set varchar_col = NULL;
তবে কলামগুলি নির্বাচন করতে যেখানে মানটি শূন্য বা নাল রয়েছে, আপনাকে ব্যবহার করতে হবে
select * from mytable where varchar_col is NULL;
ব্যবহার
select * from mytable where varchar_col = '';
সিনথেটিকভাবে সঠিক, তবে এটি কখনও সারি দেয় না।
অন্যদিকে, ওরাকলে স্ট্রিংগুলি সংযুক্ত করার সময়। NULL ভারচারগুলি খালি স্ট্রিং হিসাবে বিবেচিত হয়।
select NULL || 'abc' from DUAL;
ফলন abc । অন্যান্য ডিবিএমএস এই ক্ষেত্রে NULL ফেরত দেবে।
আপনি যখন স্পষ্টভাবে প্রকাশ করতে চান, একটি মান নির্ধারিত হয়, আপনাকে '' এর মতো কিছু ব্যবহার করতে হবে।
এবং আপনাকে উদ্বেগ করতে হবে যে ট্রামিংয়ের কারণে খালি ফলাফলগুলি নূলে নেই
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
এটা করে.
এখন ডিবিএমএসের দিকে তাকানো যেখানে '' নুলের সাথে মিল নেই (যেমন এসকিউএল-সার্ভার)
'' এর সাথে কাজ করা সাধারণত সহজ এবং বেশিরভাগ ক্ষেত্রে উভয়ের মধ্যে পার্থক্য করার কোনও ব্যবহারিক প্রয়োজন নেই। আমার জানা ব্যতিক্রমগুলির মধ্যে একটি হল যখন আপনার কলামটি কিছু সেটিংস উপস্থাপন করে এবং আপনার সেগুলির জন্য খালি ডিফল্ট না থাকে। আপনি যখন '' এবং NULL এর মধ্যে পার্থক্য করতে পারবেন আপনি নিজের সেটিংসটি খালি রয়েছে তা প্রকাশ করতে সক্ষম হন এবং ডিফল্ট প্রযোজ্য তা এড়াতে পারবেন।
NULL
না