تابع NCHAR در SQL Server: راهنمای جامع تبدیل اعداد به کاراکترهای یونیکد
تابع NCHAR در SQL Server یک کاراکتر یونیکد را از مقدار عددی (integer) که ارائه میدهید برمیگرداند. این تابع یک آرگومان (عبارت عددی) را دریافت کرده و یک رشته کاراکتری یونیکد را بازمیگرداند. تابع NCHAR شبیه تابع CHAR است، اما به جای یک مقدار کاراکتری تکبایتی، یک مقدار کاراکتری یونیکد را برمیگرداند.
برای استفاده از تابع NCHAR، باید یک عبارت عددی را به عنوان ورودی به آن بدهید. این عبارت عددی نماینده کد یونیکد کاراکتری است که میخواهید آن را دریافت کنید.
NCHAR ( integer_expression )
در این مثال، نحوه استفاده ساده از تابع NCHAR برای تبدیل یک عدد صحیح به کاراکتر یونیکد را مشاهده میکنید.
SELECT NCHAR(65) AS ConvertedCharacter;
این دستور مقدار 65 را که کد یونیکد کاراکتر ‘A’ است، به ‘A’ تبدیل کرده و نمایش میدهد.
تابع NCHAR تنها برای کاراکترهای ASCII نیست و میتواند کاراکترهای یونیکد خارج از محدوده ASCII را نیز مدیریت کند. به عنوان مثال، مقدار یونیکد برای نماد یورو (€) عدد 8364 است.
SELECT NCHAR(8364) AS EuroSign;
با اجرای این دستور، علامت یورو (€) به عنوان خروجی نمایش داده میشود.
تابع NCHAR میتواند در بند WHERE
نیز مورد استفاده قرار گیرد تا امکان جستجو یا فیلتر کردن دادهها بر اساس کاراکترهای یونیکد فراهم شود. فرض کنید جدولی دارید که کدهای کاراکتر به صورت اعداد صحیح ذخیره شدهاند و میخواهید تمام ردیفهایی را پیدا کنید که یک کاراکتر یونیکد خاص مطابقت دارد. ابتدا یک جدول نمونه ایجاد کرده و دادههایی را در آن وارد میکنیم:
CREATE TABLE UnicodeChars (
ID INT IDENTITY(1,1),
CharCode INT,
Description NVARCHAR(100)
);
سپس، دادههای نمونه را به جدول اضافه میکنیم:
INSERT INTO UnicodeChars (CharCode, Description) VALUES
(65, 'Latin Capital Letter A'),
(97, 'Latin Small Letter a'),
(8364, 'Euro Sign'),
(937, 'Greek Capital Letter Omega');
اکنون، ردیفهایی را انتخاب میکنیم که کاراکتر نمایش داده شده توسط CharCode
، حرف ‘A’ باشد:
SELECT *
FROM UnicodeChars
WHERE NCHAR(CharCode) = 'A';
خروجی این دستور ردیفی را نمایش میدهد که کد 65 (کاراکتر ‘A’) را دارد. این مثال نشان میدهد که چگونه NCHAR میتواند در فیلتر کردن دادهها بر اساس مقادیر یونیکد کمک کند.
درک تفاوت بین NCHAR، CHAR و NVARCHAR برای هر توسعهدهندهای که با SQL Server کار میکند، حیاتی است. این توابع هرچند ممکن است در ظاهر مشابه باشند، اما از نظر نحوه ذخیرهسازی و پشتیبانی از کاراکترها تفاوتهای اساسی دارند:
- CHAR: دادههای کاراکتری غیر-یونیکد با طول ثابت را ذخیره میکند. اگر
CHAR(10)
تعریف کنید و ‘hi’ را در آن ذخیره کنید، همچنان 10 بایت فضا اشغال میکند و با فاصله (padding) پر میشود. - NCHAR: دادههای کاراکتری یونیکد با طول ثابت را ذخیره میکند.
NCHAR(10)
همیشه فضای لازم برای 10 کاراکتر را اشغال میکند و با فاصله پر میشود، با این تفاوت که هر کاراکتر 2 بایت فضا اشغال میکند. - NVARCHAR: دادههای کاراکتری یونیکد با طول متغیر را ذخیره میکند.
NVARCHAR(10)
میتواند تا 10 کاراکتر را ذخیره کند، اما تنها فضای مورد نیاز را اشغال میکند. برای ‘hi’، فقط 4 بایت (2 کاراکتر * 2 بایت/کاراکتر) فضا مصرف میشود.
بیایید مثالی را برای نمایش رفتار این توابع هنگام تبدیل یک عدد صحیح به انواع مختلف کاراکتر ببینیم:
SELECT
NCHAR(77) AS NCharExample,
CHAR(77) AS CharExample,
NVARCHAR(1) + NCHAR(77) AS NVarCharExample;
خروجی این دستور برای هر سه مورد کاراکتر ‘M’ را نمایش میدهد. با وجود اینکه خروجی برای یک کاراکتر مشابه به نظر میرسد، نحوه ذخیرهسازی و چگونگی مدیریت کاراکترهای چند بایتی (یونیکد) توسط آنها به طور قابل توجهی متفاوت است که در انتخاب نوع داده مناسب بسیار مهم است.
قدرت اصلی تابع NCHAR در توانایی آن برای مدیریت کاراکترهای یونیکد است که شامل مجموعههای کاراکتری بینالمللی مختلفی میشود. اجازه دهید ببینیم چگونه این تابع با یک کاراکتر عربی کار میکند. مقدار یونیکد برای حرف عربی ‘ب’ (با) عدد 1576 است.
SELECT NCHAR(1576) AS ArabicCharacter;
با اجرای این دستور، کاراکتر ‘ب’ به درستی نمایش داده میشود. این مثال توانایی NCHAR را در تفسیر و نمایش صحیح کاراکترها از زبانهای مختلف به خوبی نشان میدهد و آن را برای کاربردهای جهانی بسیار مناسب میسازد.
تابع UNICODE
در SQL Server عملکردی معکوس تابع NCHAR
دارد. این تابع یک عبارت کاراکتری را دریافت کرده و مقدار صحیح یونیکد اولین کاراکتر آن عبارت را برمیگرداند. میتوانیم این دو تابع را با هم استفاده کنیم تا یک کاراکتر را به مقدار یونیکد آن تبدیل کنیم و سپس دوباره به همان کاراکتر برگردانیم.
SELECT UNICODE('A') AS UnicodeValue, NCHAR(UNICODE('A')) AS ConvertedBackToChar;
خروجی این دستور مقدار یونیکد ‘A’ (عدد 65) و سپس تبدیل مجدد 65 به ‘A’ را نشان میدهد. این ترکیب از توابع برای اعتبارسنجی کدهای کاراکتر یا انجام عملیات پیچیدهتر بر روی کاراکترها بسیار کاربردی است.