Fixedstring 

Sabit uzunlukta bir dize N bayt (ne karakter ne de kod noktaları).

Bir sütun bildirmek için FixedString yazın, aşağıdaki sözdizimini kullanın:

<column_name> FixedString(N)

Nerede N doğal bir sayıdır.

Bu FixedString veri tam olarak uzunluğa sahip olduğunda tür etkilidir N baytlar. Diğer tüm durumlarda, verimliliği düşürmesi muhtemeldir.

Verimli bir şekilde depolan theabilen değerlere örnekler FixedString- yazılan sütunlar:

  • IP adreslerinin ikili gösterimi (FixedString(16) IPv6 için).
  • Language codes (ru_RU, en_US … ).
  • Currency codes (USD, RUB … ).
  • Karma ikili gösterimi (FixedString(16) MD5 için, FixedString(32) SHA256 için).

UUID değerlerini depolamak için UUID veri türü.

Verileri eklerken, ClickHouse:

  • Dize daha az içeriyorsa, boş bayt ile bir dize tamamlar N baytlar.
  • Atar Too large value for FixedString(N) dize birden fazla içeriyorsa, özel durum N baytlar.

Verileri seçerken, ClickHouse dize sonunda boş bayt kaldırmaz. Eğer kullanıyorsanız WHERE yan tümcesi, null bayt el ile eşleştirmek için eklemelisiniz FixedString değer. Kullanımı için aşağıdaki örnek, nasıl gösterir WHERE fık withra ile FixedString.

Aşağıdaki tabloyu tek ile düşünelim FixedString(2) sütun:

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

Sorgu SELECT * FROM FixedStringTable WHERE a = 'b' sonuç olarak herhangi bir veri döndürmez. Filtre desenini boş baytlarla tamamlamalıyız.

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

Bu davranış için MySQL farklıdır CHAR tür (burada dizeler boşluklarla doldurulur ve boşluklar çıktı için kaldırılır).

Not uzunluğu FixedString(N) değer sabittir. Bu uzunluk fonksiyon döndürür N hatta eğer FixedString(N) değer yalnızca boş baytlarla doldurulur, ancak boş fonksiyon döndürür 1 bu durumda.

Orijinal makale

Rating: 3 - 4 votes

Was this content helpful?
★★★☆☆