* Replace underscores with hyphens * remove temporary code * fix style check * fix collapse
7.5 KiB
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.