ClickHouse/docs/zh/data_types/enum.md
sundyli 80d8f4bd60 add datatypes translate (#3403)
* add datatypes translate

* fixed some left English
2018-10-17 14:43:36 +03:00

35 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Enum
`Enum8` 或者 `Enum16`。 一组有限的字符串值,比 `String` 类型的存储更加有效。
示例:
```text
Enum8('hello' = 1, 'world' = 2)
```
- 一个类型可以表示两个值: 'hello' and 'world'。
`Enum8` 类型的每个值范围是 `-128 ... 127``Enum16` 类型的每个值范围是 `-32768 ... 32767`。所有的字符串或者数字都必须是不一样的。允许存在空字符串。如果某个 Enum 类型被指定了(在表定义的时候),数字可以是任意顺序。然而,顺序并不重要。
(译者注:如 `Enum8('he o' = 3, 'wld' = 1)` 也是合法的)
在内存中Enum 类型当做 `Int8` or `Int16` 对应的数值来存储。
当以文本方式读取的时候ClickHouse 将值解析成字符串然后去 Enum 值的集合中搜索对应字符串。如果没有找到,会抛出异常。当读取文本格式的时候,会根据读取到的字符串去找对应的数值。如果没有找到,会抛出异常。
当以文本方式写入的时候ClickHouse 将值解析成字符串写入。如果 column 数据包含垃圾不是从有用集合含有的数值会抛弃异常。Enum 类型以二进制读取和写入的方式与 Int8 和 Int16 类型一样的。
隐式默认值是对应类型的最小值。
`ORDER BY`, `GROUP BY`, `IN`, `DISTINCT`Enums 和对应数值是一样的工作方式。比如, ORDER BY 会将它们按数值排序。对 Enums 类型使用相同和比较操作符都与操作它们隐含的数值是一样的。
Enum 值不能和数值比较大小。Enums 可以和一个常量字符串比较大小。如果字符串不是一个可用的 Enum 值,会抛出异常。可以使用 IN 运算符来判断一个 Enum 是否存在于某个 Enum 集合中,其中集合中的 Enum 需要用字符串表示。
大部分数字运算和字符串运算都没有给 Enum 类型定义比如Enum 类型不能和一个数相加,或进行字符串连接的操作,但是可以通过 toString 方法返回它对应的字符串。
Enum 值使用 `toT` 函数可以转换成数值类型,其中 T 是一个数值类型。若 `T` 恰好对应 Enum 的底层数值类型,这个转换是零消耗的。
Enum 类型可以被 `ALTER` 无成本地修改对应集合的值。可以通过 `ALTER` 操作来增加或删除 Enum 的成员(只要表没有用到该值,删除都是安全的)。作为安全保障,改变之前使用过的 Enum 成员将抛出异常。
通过 `ALTER` 操作,可以将 `Enum8` 转成 `Enum16`,反之亦然,就像 `Int8``Int16`一样。
[来源文章](https://clickhouse.yandex/docs/en/data_types/enum/) <!--hide-->