--- machine_translated: true machine_translated_rev: d734a8e46ddd7465886ba4133bff743c55190626 toc_priority: 50 toc_title: "\u0634\u0645\u0627\u0631\u0634\u06CC" --- # شمارشی {#enum} نوع شمارش متشکل از ارزش به نام. مقادیر نام شده باید به عنوان اعلام شود `'string' = integer` جفت انبار فروشگاه تنها اعداد, اما پشتیبانی از عملیات با ارزش از طریق نام خود را. پشتیبانی از کلیک: - 8 بیتی `Enum`. این می تواند تا 256 مقدار شمارش شده در `[-128, 127]` محدوده. - 16 بیتی `Enum`. این می تواند تا 65536 مقدار شمارش شده در `[-32768, 32767]` محدوده. تاتر به طور خودکار انتخاب نوع `Enum` هنگامی که داده درج شده است. شما همچنین می توانید استفاده کنید `Enum8` یا `Enum16` انواع برای اطمینان در اندازه ذخیره سازی. ## نمونه های استفاده {#usage-examples} در اینجا ما یک جدول با یک ایجاد می کنیم `Enum8('hello' = 1, 'world' = 2)` نوع ستون: ``` sql CREATE TABLE t_enum ( x Enum('hello' = 1, 'world' = 2) ) ENGINE = TinyLog ``` ستون `x` فقط می توانید مقادیر که در تعریف نوع ذکر شده را ذخیره کنید: `'hello'` یا `'world'`. اگر شما سعی می کنید برای صرفه جویی در هر مقدار دیگر, کلیک یک استثنا بالا می برد. اندازه 8 بیتی برای این `Enum` به طور خودکار انتخاب شده است. ``` sql INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello') ``` ``` text Ok. ``` ``` sql INSERT INTO t_enum values('a') ``` ``` text Exception on client: Code: 49. DB::Exception: Unknown element 'a' for type Enum('hello' = 1, 'world' = 2) ``` هنگامی که شما پرس و جو داده ها را از جدول, تاتر خروجی مقادیر رشته از `Enum`. ``` sql SELECT * FROM t_enum ``` ``` text ┌─x─────┐ │ hello │ │ world │ │ hello │ └───────┘ ``` اگر شما نیاز به دیدن معادل عددی از ردیف, شما باید بازیگران `Enum` ارزش به نوع صحیح. ``` sql SELECT CAST(x, 'Int8') FROM t_enum ``` ``` text ┌─CAST(x, 'Int8')─┐ │ 1 │ │ 2 │ │ 1 │ └─────────────────┘ ``` برای ایجاد یک مقدار شمارشی در پرس و جو, شما همچنین نیاز به استفاده از `CAST`. ``` sql SELECT toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)')) ``` ``` text ┌─toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))─┐ │ Enum8('a' = 1, 'b' = 2) │ └─────────────────────────────────────────────────────┘ ``` ## قوانین عمومی و استفاده {#general-rules-and-usage} هر یک از مقادیر یک عدد در محدوده اختصاص داده شده است `-128 ... 127` برای `Enum8` یا در محدوده `-32768 ... 32767` برای `Enum16`. همه رشته ها و اعداد باید متفاوت باشد. یک رشته خالی مجاز است. اگر این نوع مشخص شده است (در یک تعریف جدول), اعداد را می توان در جهت دلخواه. با این حال, سفارش مهم نیست. نه رشته و نه مقدار عددی در یک `Enum` می تواند باشد [NULL](../../sql-reference/syntax.md). یک `Enum` می توان در [Nullable](nullable.md) نوع. بنابراین اگر شما یک جدول با استفاده از پرس و جو ایجاد کنید ``` sql CREATE TABLE t_enum_nullable ( x Nullable( Enum8('hello' = 1, 'world' = 2) ) ) ENGINE = TinyLog ``` این می تواند نه تنها ذخیره `'hello'` و `'world'` اما `NULL` همینطور ``` sql INSERT INTO t_enum_nullable Values('hello'),('world'),(NULL) ``` در رم `Enum` ستون به همان شیوه ذخیره می شود `Int8` یا `Int16` از مقادیر عددی مربوطه. هنگام خواندن در فرم متن, تاتر تجزیه ارزش به عنوان یک رشته و جستجو برای رشته مربوطه را از مجموعه ای از ارزش شمارشی. اگر یافت نشد, یک استثنا پرتاب می شود. هنگام خواندن در قالب متن, رشته به عنوان خوانده شده و مقدار عددی مربوطه نگاه کردن. یک استثنا پرتاب خواهد شد اگر یافت نشد. هنگام نوشتن در فرم متن, این ارزش به عنوان رشته مربوطه می نویسد. اگر داده های ستون شامل زباله (اعداد است که از مجموعه معتبر نیست), یک استثنا پرتاب می شود. زمانی که خواندن و نوشتن در فایل باینری فرم آن را با این نسخهها کار به همان روش برای int8 و int16 انواع داده ها. مقدار پیش فرض ضمنی ارزش با کمترین تعداد است. در طول `ORDER BY`, `GROUP BY`, `IN`, `DISTINCT` و به همین ترتیب, مادران رفتار به همان شیوه به عنوان اعداد مربوطه. مثلا, سفارش شده توسط انواع عددی. اپراتورهای برابری و مقایسه کار به همان شیوه در مادران به عنوان در مقادیر عددی اساسی انجام. مقادیر شمارشی را نمی توان با اعداد مقایسه شده است. شمارشی را می توان به یک رشته ثابت در مقایسه. اگر رشته در مقایسه با یک مقدار معتبر برای شمارشی نیست, یک استثنا پرتاب خواهد شد. اپراتور در با شمارشی در سمت چپ و مجموعه ای از رشته ها در سمت راست پشتیبانی می شود. رشته ارزش مربوط شمارشی هستند. Most numeric and string operations are not defined for Enum values, e.g. adding a number to an Enum or concatenating a string to an Enum. با این حال, شمارشی طبیعی است `toString` تابع است که ارزش رشته خود را برمی گرداند. مقادیر شمارشی نیز قابل تبدیل به انواع عددی با استفاده از `toT` تابع, که تی یک نوع عددی است. هنگامی که تی مربوط به نوع عددی اساسی شمارشی است, این تبدیل صفر هزینه است. نوع شمارشی را می توان بدون هزینه با استفاده از تغییر تغییر, اگر تنها مجموعه ای از ارزش تغییر است. ممکن است که به هر دو اضافه کردن و حذف اعضای شمارشی با استفاده از تغییر (از بین بردن امن است تنها در صورتی که مقدار حذف شده است هرگز در جدول استفاده می شود). به عنوان یک حفاظت, تغییر مقدار عددی از یک عضو شمارشی که قبلا تعریف یک استثنا پرتاب. با استفاده از تغییر آن را ممکن است برای تغییر یک enum8 به enum16 یا بالعکس فقط مانند تغییر یک int8 به int16. [مقاله اصلی](https://clickhouse.tech/docs/en/data_types/enum/)