عمومی

مقایسه ی انواع داده در SQL Server 2008 با سایر پایگاه های داده

در این مقاله به بررسی و مقایسه ی انواع داده (Data Type) در پایگاه داده SQL Server 2008 با سایر پایگاه های داده از قبیل Oracle و MySQL و Access می پردازیم.در ادامه به چگونگی نگاشت پایگاه های داده ی مذکور به پایگاه داده SQL Server 2008 خواهیم پرداخت.

  جدول زیر چگونگی نگاشت انواع داده ها (Data Type) بین پایگاه های داده ی  Oracle و   SQL Server  را نشان می دهد.

نوع داده Oracle

نوع داده SQL Server

جایگزین

BFILE

VARBINARY(MAX)

بله

BLOB

VARBINARY(MAX)

بله

CHAR([1-2000])

CHAR([1-2000])

بله

CLOB

VARCHAR(MAX)

بله

DATE

DATETIME

بله

FLOAT

FLOAT

خیر

FLOAT([1-53])

FLOAT([1-53])

خیر

FLOAT([54-126])

FLOAT

خیر

INT

NUMERIC(38)

بله

INTERVAL

DATETIME

بله

LONG

VARCHAR(MAX)

بله

LONG RAW

IMAGE

بله

NCHAR([1-1000])

NCHAR([1-1000])

خیر

NCLOB

NVARCHAR(MAX)

بله

NUMBER

FLOAT

بله

NUMBER([1-38])

NUMERIC([1-38])

خیر

NUMBER([0-38],[1-38])

NUMERIC([0-38],[1-38])

بله

NVARCHAR2([1-2000])

NVARCHAR([1-2000])

خیر

RAW([1-2000])

VARBINARY([1-2000])

خیر

REAL

FLOAT

خیر

ROWID

CHAR(18)

خیر

TIMESTAMP

DATETIME

بله

TIMESTAMP(0-7)

DATETIME

بله

TIMESTAMP(8-9)

DATETIME

بله

TIMESTAMP(0-7) WITH TIME ZONE

VARCHAR(37)

بله

TIMESTAMP(8-9) WITH TIME ZONE

VARCHAR(37)

خیر

TIMESTAMP(0-7) WITH LOCAL TIME ZONE

VARCHAR(37)

بله

TIMESTAMP(8-9) WITH LOCAL TIME ZONE

VARCHAR(37)

خیر

UROWID

CHAR(18)

خیر

VARCHAR2([1-4000])

VARCHAR([1-4000])

بله

FLOAT([54-126])

FLOAT

خیر

INT

NUMERIC(38)

بله

INTERVAL

DATETIME

بله

LONG

VARCHAR(MAX)

بله

LONG RAW

IMAGE

بله

NCHAR([1-1000])

NCHAR([1-1000])

خیر

NCLOB

NVARCHAR(MAX)

بله

NUMBER

FLOAT

بله

NUMBER([1-38])

NUMERIC([1-38])

خیر

NUMBER([0-38],[1-38])

NUMERIC([0-38],[1-38])

بله

NVARCHAR2([1-2000])

NVARCHAR([1-2000])

خیر

RAW([1-2000])

VARBINARY([1-2000])

خیر

REAL

FLOAT

خیر

ROWID

CHAR(18)

خیر

TIMESTAMP

DATETIME

بله

TIMESTAMP(0-7)

DATETIME

بله

TIMESTAMP(8-9)

DATETIME

بله

TIMESTAMP(0-7) WITH TIME ZONE

VARCHAR(37)

بله

TIMESTAMP(8-9) WITH TIME ZONE

VARCHAR(37)

خیر

TIMESTAMP(0-7) WITH LOCAL TIME ZONE

VARCHAR(37)

بله

TIMESTAMP(8-9) WITH LOCAL TIME ZONE

VARCHAR(37)

خیر

UROWID

CHAR(18)

خیر

VARCHAR2([1-4000])

VARCHAR([1-4000])

بله

TIMESTAMP(8-9) WITH TIME ZONE

VARCHAR(37)

خیر

TIMESTAMP(0-7) WITH LOCAL TIME ZONE

VARCHAR(37)

بله

TIMESTAMP(8-9) WITH LOCAL TIME ZONE

VARCHAR(37)

خیر

UROWID

CHAR(18)

خیر

VARCHAR2([1-4000])

VARCHAR([1-4000])

بله

جدول ۱

انواع داده ها در پایگاه داده های Oracle   و Microsoft SQL Server معمولا بطور کامل با یکدیگر تطابق ندارند. در صورت امکان هنگامیکه یک جدول پایگاه داده Oracle انتشار می یابد،  تطابق انواع داده ها بطور خودکار انجام می شود. در حالتیکه نگاشت نوع داده واضح نباشد، نگاشت های نوع داده ی جایگزین ارائه می شود. ستون جایگزین ها در جدول فوق وجود یا عدم وجود نگاشت های جایگزین را نشان می دهند.

ملاحظات برای نگاشت انواع داده ها:

هنگام Replicate داده ها از پایگاه داده ی Oracle، موارد زیر را مد نظر داشته باشید:

انواع داده های زیر در SQL Server پشتیبانی نمی شوند. ستون هایی که این انواع را دارند، نمی توانند Replicate شوند.

–          Object types

–          XML types

–          Varrays

–          Nested tables

–          Columns that use REF

نوع داده ی Date:

نوع داده ی Date در SQL Server از سال ۱۷۵۳ تا ۹۹۹۹ بعد از میلاد مسیح موجود می باشند، در حالیکه نوع داده ی Date در Oracle از ۴۷۱۲ قبل از میلاد مسیح تا ۴۷۱۲ بعد از میلاد مسیح موجود می باشد. اگر یک ستون از نوع داده ی Date شامل مقادیری باشد که در بازه زمانی برای SQL Server قرار نداشته باشد، بایستی نوع داده ی جایگزین ( که (VARCHAR(19 می باشد) را انتخاب نمایید.

انواع داده ی NUMBER و FLOAT:

منظور از اندازه (Scale) در نوع داده ی Number تعداد ارقام یک داده از نوع Number است و  منظور از دقت (Precision) در این نوع داده تعداد ارقام بعد از نقطه ی اعشار است. برای مثال در عدد ۱۲۳.۴۵ اندازه ۵ و دقت ۲ می باشد. Oracle اعداد با اندازه بیشتر از دقت را مجاز می داند ( مثلا (Number(4,5 ) اما در SQL Server  دقت بایستی برزگتر یا مساوی اندازه باشد. هنگام نگاشت نوع داده ی Number از پایگاه داده Oracle به پایگاه داده ی SQL Server اگر دقت بزرگتر از اندازه باشد، دقت برابر با اندازه در نظر گرفته می شود. مثلا نوع داده ی   (Number(4,5 در پایگاه داده ی Oracle به نوع داده ی (Numeric(5,5 در پایگاه داده ی SQL Server نگاشت می شود.

نکته: اگر اندازه و دقت را برای نوع داده ی Number مشخص نکنید، SQL Server بطور پیش فرض ماکزیمم مقدار (یعنی ۸ برای اندازه و ۳۸ برای دقت) را برای آنها در نظر می گیرد . توصیه ما این است که مقدار دقت و اندازه را در Oracle برای عملکرد و ذخیره سازی بهتر هنگامیکه داده Replicate می شود،  مشخص نمایید.

انواع داده با حجم بزرگ:

اوراکل حداکثر تا ۴ گیگابایت و SQL Server حداکثر تا ۲ گیگابایت از انواع داده با حجم بزرگ را پشتیبانی می نماید. داده های Replicate  شده بیش از  ۲ گیگابایت در SQL Server، کوتاه خواهند شد. اگر جدول Oracle  شامل ستون BFILE باشد، داده ها ی مربوط به ستونی که از نوع داده ی BFILE باشد، در سیستم فایل ذخیره می شوند. اکانت مدیر Replication برای دسترسی به دایرکتوریی که در آن داده ها ذخیره می شوند بایستی توسط دستور زیر داده شود:

[pre]

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

[/pre]

مشخص کردن نگاشت های نوع داده ی جایگزین:

معمولا نگاشت نوع داده پیش فرض مناسب است ولی برای بسیاری از انواع داده Oracle ، شما می توانید یک نگاشت نوع داده از یک مجموعه ای از نگاشت های جایگزین در مقابل نوع داده پیش فرض انتخاب کنید. دو روش برای مشخص کردن نگاشت های جایگزین وجود دارد:

–   لغو پیش فرض به ازای هر بند  با استفاده از فرایند های ذخیره شده یا New  Publication Wizard .

–  تغییر پیش فرض بطور عمومی با استفاده از فرآیندهای ذخیره شده برای همه ی بندهای آینده (پیش فرض برای مقالات موجود تغییر داده نشده اند).

مقایسه و نگاشت نوع داده ها در پایگاه های داده ی MySQL و SQL Server 2008  :

در این بخش به تفاوتها و نگاشت بین انواع داده در پایگاه داده ی MySQL و SQL Serever

۲۰۰۸ می پردازیم. جدول زیر به بررسی نگاشت های نوع داده برای تبدیل ستون با انواع داده گوناگون MySQL به SQL Server2008 پرداخته است.

نوع داده در MySQL

نوع داده درSQL Server 2008

(TINYINT(M

tinyint

TINYINT (1)

SMALLINT (M)

smallint

MEDIUMINT (M)

int

INT (M)

INTEGER (M)

int

BIGINT (M)

bigint

FLOAT (P)

float(P)

FLOAT [(P, S)]

float(24)

DATETIME [(D)]

datetime2

DATE [(D)]

date

TIME

time

TIMESTAMP

smalldatetime

[NATIONAL] CHAR (N)

nchar(N)

TINYTEXT

nvarchar(255)

MEDIUMTEXT

nvarchar(max)

BINARY (N)

binary(N)

TINYBLOB

varbinary(255)

BLOB (N)

varbinary (N | max)

SMALLINT (M)

smallint

MEDIUMINT (M)

int

INT (M)

INTEGER (M)

int

BIGINT (M)

bigint

FLOAT (P)

float(P)

جدول ۲

مقایسه و نگاشت نوع داده ها در Access و SQL Server 2008  :

جدول زیر انواع داده ها  در پایگاه داده ی Microsoft Access  و نگاشت آن به انواع داده ی ۲۰۰۸ SQL Server را نشان می دهد.

Access

SQL Server

Text

nvarchar

Memo

nvarchar(max)

Byte

tinyint

Integer

smallint

Long Integer

int

Single

real

Double

float

Replication ID (guid)

uniqueidentifier

Decimal

float

Date/Time

datetime

Currency

money

AutoNumber

int

Yes/No (Boolean)

bit

OLE Object

varbinary(max)

جدول ۳

بررسی بازه زمانی  datetime درAccess و نگاشت آن به SQL Server2008:

نوع داده Date/Time در Access از بازه زمانی ۱/۱/۱۰۰ تا ۱۲/۳۱/۹۹۹۹ پشتیبانی می کند در حالیکه نوع داده ی datetime در SQL Server 2008 محدود به بازه زمانی ۱/۱/۱۷۵۳ تا ۱۲/۳۱/۹۹۹۹ می شود.

نکته: پایگاه های داده ی Access و SQL Serever 2008 مقادیر datetime را بطور متفاوت از یکدیگر ذخیره می نمایند.  اگر برنامه کاربردی شما شامل منطق سفارشی بر مبنای فرضیاتی در مورد چگونگی ذخیره سازی مقادیر datetime بعنوان Number باشد، آن منطق بعد از اینکه داده های شما به SQL Server منتقل می شوند،  کارآمد نخواهد بود.

بررسی نگاشت های (Unicode (nchar, nvarchar, ntext در SQL Server :

بسته به احتیاجات برنامه کاربردی شما، ممکن است  نگاشت پیش فرض نوع داده ی Text در Access از nvarchar  را به varchar  بخواهید تغییر دهید. نوع داده ی Varchar یک بایت را برای ذخیره سازی لازم دارد که محدود به ۲۵۶ کاراکتر می شود.

کدینگ Unicode مربوط به nvarchar از ۲ بایت برای هر کاراکتر استفاده می کند و از الفبای غیر اروپایی پشتیبانی می کند. بنابراین اگر برنامه کاربردی شما نیازی به مجموعه ی کاراکترهای گسترده ندارد، بهتر است از nvarchar استفاده ننمایید.

مدیریت مقادیر Null، رشته های با طول صفر و منطق سه ارزشی:

Access و SQL Server هردو از مفاهیم Null و رشته های با طول صفر پشتیبانی می نمایند و اکثر مواقع اشکال و مناقشات بر سر چگونگی استفاده ی Null در برنامه های کاربردی پایگاه داده است. در منطق سه ارزشی، یک مقایسه می تواند هر یک از ارزش های زیر را نتیجه دهد:

–         True

–         False

–         Unknown(null)

در SQL Server ارزش Null بعنوان Unknown تصور می شود. در Expression ها یی که از عملیات ریاضی در آنها استفاده می شود، اگر هر یک از عملوند ها ارزش Null داشته باشند، نتیجه Null خواهد شد. Microsoft توصیه می نماید از استفاده ی ارزش های Null در جداول  خودداری کنیم ، زیرا جستارها و بروزرسانی ها را پیچیده می نماید.

بررسی ارزش های Boolean ، Bit و True:

در Access ارزش های Boolean یا همان بله/خیر مانند ارزش ها برای متغییر های Boolean در VBA که بصورت ۰ و ۱- است استفاده می شود. نوع داده ی bit در SQL Server از ارزش های ۰ و ۱ استفاده می نماید. در هنگام نگاشت از Access به ستون مربوط به نوع داده ی bit در SQL Server،  هر کدی که ارزش True داشته باشد به مقدار ۱- نگاشت می شود و شما یک پیام خطای منطقی دریافت خواهید کرد. شما دو انتخاب دارید: ۱- ستون نوع داده مذکور را  به ستون نوع داده ی smallint نگاشت کنید یا منطقی که بسته به ارزش True که معادل ۱- است را اصلاح کنید. ۲-  اگر منطق شما از ارزش False استفاده می نماید، می توانید به ستون نوع داده ی tinyint در SQLServer نگاشت کنید.

منابع:

سایت MSSQL Server 2008

سایت c-sharpcorner

سایت sql-statements

سایت ehow

با کارت بانکی باشگاه ایران هاست پولتان به حسابتان باز می گردد.

همین حالا رایگان عضو شوید

مدیر بلاگ

مشخصات مدیر

نوشته های مشابه

یک نظر

  1. سلام و مرسی از وبلاگ خوبتون
    من یه سوال داشتم از خدمتتون میخواستم بدونم علت گذاشتن دو داده decimal وnumeric به خاطرچی هست؟
    اگه تفاوتی ندارن پس چرا دو تا نوع داده گذاشتن ممنون میشم هر چه سریع تر پاسخ بدید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن