You need to enable JavaScript to run this app.
ByteHouse 企业版

ByteHouse 企业版

复制全文
数据类型
字符串类型 String FixedString
复制全文
字符串类型 String FixedString

String

字符串可以任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的 VARCHAR、BLOB、CLOB 等类型。

编码

ClickHouse 没有编码的概念。字符串可以是任意的字节集,按它们原本的方式进行存储和输出。
若需存储文本,我们建议使用 UTF-8 编码。至少,如果你的终端使用UTF-8(推荐),这样读写就不需要进行任何的转换了。
同样,对不同的编码文本 ClickHouse 会有不同处理字符串的函数。
比如,length 函数可以计算字符串包含的字节数组的长度,然而 lengthUTF8 函数是假设字符串以 UTF-8 编码,计算的是字符串包含的 Unicode 字符的长度。

FixedString

固定长度 N 的字符串(N 必须是严格的正自然数)。
您可以使用下面的语法对列声明为FixedString类型:

<column_name> FixedString(N)

其中N表示自然数。
当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。
可以有效存储在FixedString类型的列中的值的示例:

  • 二进制表示的IP地址(IPv6使用FixedString(16)
  • 语言代码(ru_RU, en_US ... )
  • 货币代码(USD, RUB ... )
  • 二进制表示的哈希值(MD5使用FixedString(16),SHA256使用FixedString(32)

请使用UUID数据类型来存储UUID值,。
当向ClickHouse中插入数据时,

  • 如果字符串包含的字节数少于`N’,将对字符串末尾进行空字节填充。
  • 如果字符串包含的字节数大于N,将抛出Too large value for FixedString(N)异常。

当做数据查询时,ClickHouse不会删除字符串末尾的空字节。 如果使用WHERE子句,则须要手动添加空字节以匹配FixedString的值。 以下示例阐明了如何将WHERE子句与FixedString一起使用。
考虑带有FixedString(2)列的表:

┌─name──┐
│ b     │
└───────┘

查询语句SELECT * FROM FixedStringTable WHERE a = 'b' 不会返回任何结果。请使用空字节来填充筛选条件。

SELECT * FROM FixedStringTableWHERE a = 'b\0'
┌─a─┐
│ b │
└───┘

这种方式与MySQL的CHAR类型的方式不同(MySQL中使用空格填充字符串,并在输出时删除空格)。
请注意,FixedString(N)的长度是个常量。仅由空字符组成的字符串,函数length返回值为N,而函数empty的返回值为1

最近更新时间:2024.12.16 16:16:56
这个页面对您有帮助吗?
有用
有用
无用
无用