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

> Documentation sur le format RowBinaryWithNamesAndTypesAndDefaults

# RowBinaryWithNamesAndTypesAndDefaults

| Entrée | Sortie | Alias |
| - | - | - |
| ✔ | ✗ | |

<div id="description">
  ## Description
</div>

Semblable au format [`RowBinaryWithNamesAndTypes`](/fr/reference/formats/RowBinary/RowBinaryWithNamesAndTypes), mais avec un octet supplémentaire avant chaque cellule indiquant si la valeur `DEFAULT` de la colonne doit être utilisée — exactement comme dans le format [`RowBinaryWithDefaults`](/fr/reference/formats/RowBinary/RowBinaryWithDefaults). Cette combinaison prend en charge les `INSERT` avec évolution du schéma : l'émetteur peut omettre des colonnes de l'en-tête (elles reçoivent alors la valeur `DEFAULT` de la colonne cible) et, pour chaque colonne qu'il envoie, il peut marquer certaines cellules comme « utiliser la valeur `DEFAULT` de la colonne » sans confondre cela avec `NULL`.

Ce format est pris en charge uniquement en entrée.

<div id="wire-format">
  ## Format de transmission
</div>

L’en-tête est identique à [`RowBinaryWithNamesAndTypes`](/fr/reference/formats/RowBinary/RowBinaryWithNamesAndTypes) :

1. Un `VarUInt` indiquant le nombre de colonnes `N`.
2. `N` `String` précédées de leur longueur, contenant les noms de colonnes.
3. `N` types de colonnes — soit des noms textuels, soit un encodage binaire compact, selon les paramètres `output_format_binary_encode_types_in_binary_format` / `input_format_binary_decode_types_in_binary_format`.

Après l’en-tête, chaque ligne se compose de `N` cellules. Pour chaque cellule :

* Un unique octet marqueur `UInt8`.
  * `0x01` — utilise l’expression `DEFAULT` de la colonne cible. Aucun octet de valeur ne suit.
  * `0x00` — une valeur suit, sérialisée avec le sérialiseur `RowBinary` du type de colonne. Pour `Nullable(T)`, les octets de valeur commencent par l’octet NULL de `Nullable` (`0` pour non-NULL, `1` pour NULL), puis par la valeur interne si elle n’est pas NULL.

<div id="defaults-vs-null">
  ## Valeurs par défaut vs NULL
</div>

Le marqueur de valeur par cellule et l’octet NULL intégré à `Nullable` sont indépendants. Une colonne `Nullable(UInt32) DEFAULT 42` peut être envoyée de trois façons différentes pour chaque ligne :

| Octets | Signification |
| - | - |
| `01` | Utiliser `DEFAULT 42`. |
| `00 01` | Chemin de valeur, puis `NULL` via le type `Nullable`. |
| `00 00 …` | Chemin de valeur, puis une valeur interne non nulle. |

<div id="schema-evolution">
  ## Évolution du schéma
</div>

| Cas | Comportement |
| - | - |
| Colonne entièrement absente de l’en-tête du fichier | Remplie dans la cible via `insertDefaultsForNotSeenColumns` ; contrôlée par `defaults_for_omitted_fields`. |
| Colonne présente dans l’en-tête, marqueur de cellule `0x01` | `insertDefault` pour chaque ligne. |
| Colonne présente dans l’en-tête, marqueur de cellule `0x00` | La valeur est parsée normalement. |
| Colonne supplémentaire dans l’en-tête, absente de la table cible | Ignorée silencieusement lorsque `input_format_skip_unknown_fields = 1` (le marqueur est d’abord consommé ; si `0x01`, rien d’autre ; si `0x00`, la valeur typée est parsée puis ignorée). |

<div id="example-usage">
  ## Exemple d’utilisation
</div>

```sql title="Query" theme={null}
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
```

```response title="Response" theme={null}
┌──x─┐
│ 42 │
└────┘
```

* L’en-tête comprend une colonne nommée `x` de type `Nullable(UInt32)`.
* L’unique cellule utilise le marqueur `0x01`, ce qui signifie "utiliser `DEFAULT 42`".

<div id="format-settings">
  ## Paramètres de format
</div>

Les paramètres suivants sont communs à tous les formats de type `RowBinary`.

| Paramètre | Description | Par défaut |
| - | - | - |
| [`format_binary_max_string_size`](/fr/reference/settings/formats/format-binary#format_binary_max_string_size) | Taille maximale autorisée pour String dans le format RowBinary. | `1GiB` |
| [`output_format_binary_encode_types_in_binary_format`](/fr/reference/settings/formats/output-format#output_format_binary_encode_types_in_binary_format) | Permet d'écrire les types dans l'en-tête à l'aide d'un [`encodage binaire`](/fr/reference/data-types/data-types-binary-encoding) au lieu de chaînes contenant les noms de type dans le format de sortie [`RowBinaryWithNamesAndTypes`](/fr/reference/formats/RowBinary/RowBinaryWithNamesAndTypes). | `false` |
| [`input_format_binary_decode_types_in_binary_format`](/fr/reference/settings/formats/input-format#input_format_binary_decode_types_in_binary_format) | Permet de lire les types dans l'en-tête à l'aide d'un [`encodage binaire`](/fr/reference/data-types/data-types-binary-encoding) au lieu de chaînes contenant les noms de type dans le format d'entrée [`RowBinaryWithNamesAndTypes`](/fr/reference/formats/RowBinary/RowBinaryWithNamesAndTypes). | `false` |
| [`output_format_binary_write_json_as_string`](/fr/reference/settings/formats/output-format#output_format_binary_write_json_as_string) | Permet d'écrire les valeurs du type de données [`JSON`](/fr/reference/data-types/newjson) comme des valeurs `JSON` de type [String](/fr/reference/data-types/string) dans le format de sortie [`RowBinary`](/fr/reference/formats/RowBinary/RowBinary). | `false` |
| [`input_format_binary_read_json_as_string`](/fr/reference/settings/formats/input-format#input_format_binary_read_json_as_string) | Permet de lire les valeurs du type de données [`JSON`](/fr/reference/data-types/newjson) comme des valeurs `JSON` de type [String](/fr/reference/data-types/string) dans le format d'entrée [`RowBinary`](/fr/reference/formats/RowBinary/RowBinary). | `false` |
