> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق نوع البيانات FixedString في ClickHouse

# FixedString(N)

سلسلة نصية ذات طول ثابت يبلغ `N` بايت (وليست محارف ولا نقاط ترميز).

للتصريح عن عمود من النوع `FixedString`، استخدم الصيغة التالية:

```sql theme={null}
<column_name> FixedString(N)
```

حيث إن `N` عدد طبيعي.

يكون النوع `FixedString` فعّالًا عندما يكون طول البيانات `N` بايتًا بالضبط. وفي جميع الحالات الأخرى، يُرجَّح أن يؤدي إلى انخفاض الكفاءة.

أمثلة على القيم التي يمكن تخزينها بكفاءة في الأعمدة من النوع `FixedString`:

* التمثيل الثنائي لعناوين IP (`FixedString(16)` لعناوين IPv6).
* رموز اللغات (ru\_RU, en\_US ... ).
* رموز العملات (USD, RUB ... ).
* التمثيل الثنائي لقيم hash (`FixedString(16)` لـ MD5، و`FixedString(32)` لـ SHA256).

لتخزين قيم UUID، استخدم نوع البيانات [UUID](/ar/reference/data-types/uuid).

عند إدراج البيانات، فإن ClickHouse:

* يُكمل السلسلة النصية ببايتات null إذا كانت السلسلة تحتوي على أقل من `N` بايت.
* يُصدر الاستثناء `Too large value for FixedString(N)` إذا كانت السلسلة تحتوي على أكثر من `N` بايت.

لننظر في الجدول التالي الذي يحتوي على عمود واحد من النوع `FixedString(2)`:

```sql theme={null}

INSERT INTO FixedStringTable VALUES ('a'), ('ab'), ('');
```

```sql theme={null}
SELECT
    name,
    toTypeName(name),
    length(name),
    empty(name)
FROM FixedStringTable;
```

```text theme={null}
┌─name─┬─toTypeName(name)─┬─length(name)─┬─empty(name)─┐
│ a    │ FixedString(2)   │            2 │           0 │
│ ab   │ FixedString(2)   │            2 │           0 │
│      │ FixedString(2)   │            2 │           1 │
└──────┴──────────────────┴──────────────┴─────────────┘
```

لاحظ أن طول القيمة `FixedString(N)` ثابت. تُرجع الدالة [length](/ar/reference/functions/regular-functions/array-functions#length) القيمة `N` حتى إذا كانت قيمة `FixedString(N)` مملوءة فقط ببايتات فارغة، لكن الدالة [empty](/ar/reference/functions/regular-functions/array-functions#empty) تُرجع `1` في هذه الحالة.

يؤدي تحديد البيانات باستخدام بند `WHERE` إلى نتائج مختلفة بحسب كيفية تحديد الشرط:

* إذا استُخدم عامل المساواة `=` أو `==` أو الدالة `equals`، فإن ClickHouse *لا* يأخذ المحرف `\0` في الاعتبار، أي إن الاستعلامين `SELECT * FROM FixedStringTable WHERE name = 'a';` و `SELECT * FROM FixedStringTable WHERE name = 'a\0';` يُرجعان النتيجة نفسها.
* إذا استُخدم بند `LIKE`، فإن ClickHouse *يأخذ* المحرف `\0` في الاعتبار، لذا قد يلزم تحديد المحرف `\0` صراحةً في شرط التصفية.

```sql theme={null}
SELECT name
FROM FixedStringTable
WHERE name = 'a'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name = 'a\0'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name = 'a'
FORMAT JSONStringsEachRow

Query id: c32cec28-bb9e-4650-86ce-d74a1694d79e

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name LIKE 'a'
FORMAT JSONStringsEachRow

0 rows in set.

SELECT name
FROM FixedStringTable
WHERE name LIKE 'a\0'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}
```
