ClickHouse/docs/fa/sql-reference/data-types/enum.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

7.5 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 50 شمارشی

شمارشی

نوع شمارش متشکل از ارزش به نام.

مقادیر نام شده باید به عنوان اعلام شود 'string' = integer جفت انبار فروشگاه تنها اعداد, اما پشتیبانی از عملیات با ارزش از طریق نام خود را.

پشتیبانی از کلیک:

  • 8 بیتی Enum. این می تواند تا 256 مقدار شمارش شده در [-128, 127] محدوده.
  • 16 بیتی Enum. این می تواند تا 65536 مقدار شمارش شده در [-32768, 32767] محدوده.

تاتر به طور خودکار انتخاب نوع Enum هنگامی که داده درج شده است. شما همچنین می توانید استفاده کنید Enum8 یا Enum16 انواع برای اطمینان در اندازه ذخیره سازی.

نمونه های استفاده

در اینجا ما یک جدول با یک ایجاد می کنیم Enum8('hello' = 1, 'world' = 2) نوع ستون:

CREATE TABLE t_enum
(
    x Enum('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog

ستون x فقط می توانید مقادیر که در تعریف نوع ذکر شده را ذخیره کنید: 'hello' یا 'world'. اگر شما سعی می کنید برای صرفه جویی در هر مقدار دیگر, کلیک یک استثنا بالا می برد. اندازه 8 بیتی برای این Enum به طور خودکار انتخاب شده است.

INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
Ok.
INSERT INTO t_enum values('a')
Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum('hello' = 1, 'world' = 2)

هنگامی که شما پرس و جو داده ها را از جدول, تاتر خروجی مقادیر رشته از Enum.

SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘

اگر شما نیاز به دیدن معادل عددی از ردیف, شما باید بازیگران Enum ارزش به نوع صحیح.

SELECT CAST(x, 'Int8') FROM t_enum
┌─CAST(x, 'Int8')─┐
│               1 │
│               2 │
│               1 │
└─────────────────┘

برای ایجاد یک مقدار شمارشی در پرس و جو, شما همچنین نیاز به استفاده از CAST.

SELECT toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))
┌─toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))─┐
│ Enum8('a' = 1, 'b' = 2)                             │
└─────────────────────────────────────────────────────┘

قوانین عمومی و استفاده

هر یک از مقادیر یک عدد در محدوده اختصاص داده شده است -128 ... 127 برای Enum8 یا در محدوده -32768 ... 32767 برای Enum16. همه رشته ها و اعداد باید متفاوت باشد. یک رشته خالی مجاز است. اگر این نوع مشخص شده است (در یک تعریف جدول), اعداد را می توان در جهت دلخواه. با این حال, سفارش مهم نیست.

نه رشته و نه مقدار عددی در یک Enum می تواند باشد NULL.

یک Enum می توان در Nullable نوع. بنابراین اگر شما یک جدول با استفاده از پرس و جو ایجاد کنید

CREATE TABLE t_enum_nullable
(
    x Nullable( Enum8('hello' = 1, 'world' = 2) )
)
ENGINE = TinyLog

این می تواند نه تنها ذخیره 'hello' و 'world' اما NULL همینطور

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.

مقاله اصلی