> ## 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.

> 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_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#input_format_binary_decode_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_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_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_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`    |
