ستون ها و انواع داده در اوراکل – انواع کاراکتری

در مفاهیم پایگاه داده های رابطه ای هر یک از جدول ها معادل یکی از موجودیت های سیستمی هستند که آنرا مدل کرده ایم. هر موجودیت دارای یک سری خصوصیت مانند نام، نام خانوادگی، سن، محل تولد، تاریخ تولد، شماره تماس، آدرس، رایانامه (آدرس الکترونیکی)، تاریخ استخدام، محصول های سفارش داده شده، میزان حقوق واریزی، آخرین ورود به سایت و غیره است. هر یک از این خصوصیت ها معادل با ستون های جدول هستند.

بنابراین در زمان ایجاد جدول باید (احتمالا) از روی دایارگرام EER که از پیش آماده کرده ایم، ستون های جدول را ایجاد کنیم. هر ستون دارای یک نام، نوع داده (data type) و اندازه یا بازه مقادیری است که می تواند دریافت کند. به طور مثال ستونی که باید نام خانوادگی افراد را در خود ذخیره کند به نام first_name و از نوع رشته های متغیر VARCHAR2 و به اندازه ۵۰ بایت است.

در واقع نام ستون بیانگر خصوصیتی است که نمونه های (سطرهای) جدول این خصوصیت را خواهند داشت و نوع داده یک ستون تعیین می کند که چه نوع مقداری باید در ستون ذخیره شود. به طور مثال فیلد سن در هر سطر باید مقدار عددی و فیلد تاریخ تولد مقدار تاریخ را در خود نگه داریند.

هر سطر از یک جدول را یک نمونه از آن جدول یا موجودیت می نامند. به طور مثال چندین کارمند با نام و شماره ملی و کارمندی متفاوت داریم که هر یک از آنها یک نمونه از موجودیت کارمند و به عبارت دیگر هر یک از آنها یک سطر از جدول کارمندان هستند. هر ستون نیز یک فیلد (field) نامیده می شود. شکل زیر مثالی از یک جدول، ستون ها و سطرهای آنرا را نشان می دهد.

انواع داده در اوراکل

انواع داده در اوراکل را می توانیم به ۵ دسته زیر تقسیم کنیم. تمامی دسته های زیر جز داده های درونی اوراکل هستند. بنابراین مطابق با شکل بالا می بینید که هر فیلد از هر سطر مقداری از یک ستون معادل به نوع داده آن ستون را نگه می دارپ. به طور مثال در فیلد first_name از هر سطر مقدار نام کارمند از نوع VARCHAR2 نگهداری می شود.

۱ – انوع داده کاراکتری Character Data Types

۲ – انوع داده عددی Numeric Data Types

۳ – انواع داده ای تاریخ/زمام Date/Time Data Types

۴ – انواع داده ای اشیا بزرگ دودوی Binray Larg Object Data Types

۵ – نوع داده ای Rowid

اما از انوع داده ای در کجا استفاده می کنیم؟ به طور کلی در سه زمان زیر باید نوع داده را تعیین کنیم:

۱ – در زمان ایجاد ستون های جدول

۲ – در زمان تعریف متغیرهای PL/SQL

۳ – در زمان نوشتن و تعیین آرگومان های ورودی روال ها یا پروسیجرها یا تابع های ذخیره شده (procedure or stored function) در PL/SQL

۱ – انواع داده کاراکتری

انوع داده کاراکتری (character data types) که در شکل زیر نمایش داده شده اند به ۸ نوع تقسیم می شوند که در ادامه چهار نوع آنها را توضیح داده ایم. انواع CHAR و NCHAR تنها می توانند حروف الفبا و فضای خالی را در خود نگه دارند در حالی که انواع VARCHAR2 و NVARCHAR2 می توانند کاراکترهای عددی، حروف القبا، کاراکترهای خاص مانند @ و فضای خالی را در خود نگه دارند. همچنین انواع CHAR و NCHAR می توانند تعداد ثابتی (fixed) از کاراکترها را نگه دارند در حالی که انواع VARCHAR2 و NVARCHAR2 می توانند تعداد متغیری (variable) از کاراکترها را نگه دارند.

نوع داده CHAR و NCHAR (بزرگی یا کوچکی حروف در نام انواع داده مهم نیست) برای ذخیره سازی کاراکترها با طول ثابت و در مقابل VARCHAR2 و NVARCHAR2 برای ذخیره سازی کاراکترها با طول متغیر استفاده می شوند. حرف N ابتدای NCHAR و NVARCHAR2 به National Character Set اشاره دارد. به طور مثال در NCHAR و یا NVARCHAR2 می توانیم کاراکترهای فارسی را ذخیره کنیم.

تفاوت CHAR و NCHAR در این است که در NCHAR می توانیم حروف غیر انگلیسی یا اصطلاحا حروف یونیکد را ذخیره کنیم ولی شباهت هر CHAR و NCHAR در این است که همگی تعداد کاراکتر با طول ثابت را در خود نگه می دارند.

اگر نوع ستون CHAR باشد می توانیم تا ۲۰۰۰ بایت معادل ۲۰۰۰ کاراکتر را با تعداد طول ثابت در ستون ذخیره کنیم. در مقابل اگر ستونی از نوع NCHAR باشد و Character Set پایگاه داده اوراکل از نوع UTF8 باشد می توانیم تا ۲۰۰۰ کاراکتر (مثلا فارسی) را در آن نگه داریم ولی در مقابل اگر نوع ستون NCHAR باشد و Character Set پایگاه داده اوراکل از نوع AL16UTF16 باشد می توانیم تا ۲۰۰۰ کاراکتر را در آن نگه داریم. پس نتیجه می گیریم

۱ – حداکثر تعداد کاراکتر در ستون های CHAR برابر با ۲۰۰۰ کاراکتر است.

۲ – حداکثر تعداد کاراکتر در ستون های NCHAR با Charcter Set از نوع UTF8 برابر با ۲۰۰۰ کاراکتر است.

۳- حداکثر تعداد کاراکتر در ستون های NCHAR با Charcter Set از نوعAL16UTF16 برابر با ۱۰۰۰ کاراکتر است.

۴ – تعداد کاراکترها در CHAR و NCHAR ثابت است.

۵ – در ستون های نوع CHAR و NCHAR حتما باید در زمان تعریف اندازه یا تعداد کاراکترها (پارامتر size) را تعیین کنیم.

به طور مثال اگر ستونی از نوع CHAR و با طول ۲۰ کاراکتر باشد و تنها ۱۰ کاراکتر را وارد کنیم، پس آن ۱۰ کارکتر باقی مانده باید با فضای خالی پر شوند، به همین دلیل می گوییم انواع CHAR و NCHAR با طول ثابت هستند. برای اطلاع بیشتر می توانید لینک های زیر را مطالعه کنید.

CHAR

NCHAR

اما در مقابل انواع VARCHAR2 و NVARCHAR2 هر دو تعداد کاراکترهایی به طول ثابت را در خود ذخیره می کنند. به طور مثال می خواهیم نام و نام خانوادگی را ذخیره کنیم، قاعدتا طول یا تعداد کاراکترهای نام افراد با یکدیگر متفاوت است، پس لازم است پارامتر size را برابر با بیشترین تعداد کاراکتر مجاز قرار دهیم. به طور مثال برای نام افراد حداکثر تا ۳۰ کاراکتر قرار دهیم.

در CHAR و NCHAR اگر از تعداد کارامترهای مجاز استفاده نشود، بقیه تعداد کاراکترهای استفاده نشده با فضای حالی پر می شوند ولی در انواع VARCHAR2 و NVARCHAR2 این طور نیست و اگر طول ستون را برابر با ۳۰ کاراکتر در نظر گرفته باشیم، و تنها ۱۵ کاراکتر وارد کنیم، دیگر ۱۵ تعداد کاراکتر استفاده نشده با فضای خالی پر نمی شوند. برای همین است که می گوییم انواع VARCHAR2 و NVARCHAR2 با طول متغیر (VARiable) هستند. برای اطلاع بیشتر می توانید لینک های زیر را مطالعه کنید.

VARCHAR2

NVARCHAR2

همچنین می توانید مطلب توابع تک سطری در SQL – توابع کاراکتری را نیز بخوانید.