ClickHouse/docs/zh/data_types/fixedstring.md
2019-10-24 21:22:50 +08:00

2.0 KiB
Raw Blame History

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一起使用。

考虑带有FixedString2)列的表:

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

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

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

这种方式与MySQL的CHAR类型的方式不同MySQL中使用空格填充字符串并在输出时删除空格

请注意,FixedString(N)的长度是个常量。仅由空字符组成的字符串,函数length返回值为N,而函数empty的返回值为1

来源文章