Types de données Chaîne & Binaire

Cette rubrique décrit les types de données de chaîne/texte, y compris les chaînes binaires, pris en charge dans Snowflake, ainsi que les formats pris en charge pour les constantes/littéraux de chaîne.

Dans ce chapitre :

Types de données pour les chaînes de texte

Snowflake prend en charge les types de données suivants pour les chaînes de texte (c.-à-d. de caractères).

VARCHAR

VARCHAR contient des caractères unicode.

La longueur maximale est de 16 MB (non compressé). Le nombre maximum de caractères Unicode pouvant être stockés dans une colonne VARCHAR dépend si les caractères sont mono-octet ou multi-octets :

Un octet

16,777,216

Multi-octets

Entre 8 388 608 (2 octets par caractère) et 4 194 304 (4 octets par caractère)

Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale.

Une colonne ne consomme de l’espace de stockage que pour la quantité de données réellement stockées. Par exemple, une chaîne d’1 caractère dans une colonne VARCHAR(16777216) ne consomme qu’un seul caractère.

Il n’y a pas de différence de performance entre l’utilisation de la déclaration VARCHAR sur toute la longueur VARCHAR(16777216) ou l’utilisation d’une taille inférieure. Notez que dans n’importe quelle base de données relationnelle, les instructions SELECT dans lesquelles une clause WHERE fait référence à des colonnes VARCHAR ou colonnes de chaînes ne sont pas aussi rapides que les instructions SELECT filtrées en utilisant une condition de date ou de colonne numérique.

Certains outils BI/ETL définissent la taille maximale des données VARCHAR en stockage ou en mémoire. Si vous connaissez la taille maximale d’une colonne, vous pouvez limiter la taille lorsque vous ajoutez la colonne.

CHAR , CHARACTER

Synonyme de VARCHAR, sauf que CHAR(1) est la valeur par défaut si la longueur n’est pas spécifiée.

Note

Snowflake s’écarte actuellement de la sémantique courante CHAR en ce sens que les chaînes plus courtes que la longueur maximale ne sont pas espacées à la fin.

STRING , TEXT

Synonyme de VARCHAR.

Exemples de chaînes de caractères dans les colonnes de tables

CREATE OR REPLACE TABLE test_text(v VARCHAR,
                                  v50 VARCHAR(50),
                                  c CHAR,
                                  c10 CHAR(10),
                                  s STRING,
                                  s20 STRING(20),
                                  t TEXT,
                                  t30 TEXT(30)
                                  );

DESC TABLE test_text;

+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| V    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| V50  | VARCHAR(50)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C    | VARCHAR(1)        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C10  | VARCHAR(10)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S20  | VARCHAR(20)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T30  | VARCHAR(30)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+

Types de données pour les chaînes binaires

Snowflake prend en charge les types de données suivants pour les chaînes binaires.

BINARY

La longueur maximale est de 8 MB (8 388 608 octets). Contrairement à VARCHAR, le type de données BINARY n’a aucune notion de caractères Unicode, donc la longueur est toujours mesurée en termes d’octets.

Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale.

VARBINARY

VARBINARY est synonyme de BINARY.

Représentation interne

Le type de données BINARY contient une séquence d’octets de 8 bits.

Lorsque Snowflake affiche des valeurs de données BINARY, Snowflake représente souvent chaque octet comme 2 caractères hexadécimaux. Par exemple, le mot « HELP » peut être affiché comme 48454C50, où « 48 » est l’équivalent hexadécimal de la lettre ASCII (Unicode) « H », « 45 » est la représentation hexadécimale de la lettre « E », etc.

Pour plus d’informations sur la saisie et l’affichage de données BINARY, voir : Entrée et sortie binaires.

Exemples binaires dans les colonnes de tables

CREATE OR REPLACE TABLE test_binary(b BINARY,
                                    b100 BINARY(100),
                                    vb VARBINARY
                                    );

DESC TABLE test_binary;

+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type            | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| B    | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| B100 | BINARY(100)     | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| VB   | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+

Constantes de chaîne

Les constantes (aussi connues sous le nom de litéraux) font référence à des valeurs de données fixes. Les constantes de chaîne dans Snowflake doivent toujours être entourées entre des caractères de délimitation. Snowflake prend en charge l’utilisation de guillemets simples ou de signes de dollar pour délimiter les constantes de chaîne.

Constantes de chaîne simple entre guillemets simples

Une constante de chaîne peut être placée entre des délimiteurs de guillemets simples (par ex. 'This is a string'). Pour inclure un caractère entre guillemets simples dans une constante de chaîne, tapez deux guillemets simples avant et après le caractère (par ex. '').

Par exemple :

SELECT 'Today''s sales projections', '-''''-';

+------------------------------+----------+
| 'TODAY''S SALES PROJECTIONS' | '-''''-' |
|------------------------------+----------|
| Today's sales projections    | -''-     |
+------------------------------+----------+

Note

Deux guillemets simples ne sont pas équivalents à un guillemet double ("), qui est utilisé (si nécessaire) pour délimiter les identificateurs d’objet. Pour plus d’informations, voir Exigences relatives à l’identificateur.

Séquences d’échappement

Au sein d’une constante de chaîne entre guillemets simples, il est possible d’inclure un quillemet simple ainsi que d’autres caractères spéciaux dans des séquences d’échappement. Une barre oblique inverse (\) commence une séquence d’échappement.

Il existe trois types de séquences d’échappement : simple, octale et hexadécimale :

Séquence d’échappement

Caractère représenté

Un guillemet simple (')

« 

Un guillemet double (")

\

Une barre oblique inverse (\)

b

Un retour arrière

f

Un saut de page

n

Un saut de ligne (nouvelle ligne)

r

Un retour chariot

t

Une tabulation

ooo

Un caractère ASCII en notation octale

xhhh

Un caractère ASCII en notation hexadécimale

Par exemple :

SELECT $1, $2 FROM
VALUES
('Tab','Hel\tlo'),
('Newline','Hel\nlo'),
('Octal','-\041-'),
('Hexadecimal','-\x21-')
;

+-------------+-----+
| $1          | $2  |
|-------------+-----|
| Tab         | Hel lo     |
| Newline     | Hel |
|             | lo  |
| Octal       | -!- |
| Hexadecimal | -!- |
+-------------+-----+

Notez qu’un caractère non spécial échappé avec une barre oblique inverse est simplement interprété comme ce caractère, par exemple '\z' devient 'z'.

Constantes de chaînes de caractères comprises entre des dollars

Lorsqu’une chaîne de caractères contient plusieurs guillemets, il peut être plus simple d’inclure des constantes de chaîne de caractères entre des signes dollar plutôt que des guillemets simples. Une constante de chaîne comprise entre des dollars se compose des caractères de la chaîne entourés d’une paire de signes de dollar ($$).

Par exemple, les constantes de chaîne suivantes sont équivalentes :

'string with a \' character'

$$string with a ' character$$

Une constante de chaîne entre dollars peut inclure des guillemets, ou tout autre caractère, sans qu’il soit nécessaire d’utiliser des caractères d’échappement. Le contenu de la chaîne est toujours écrit littéralement. Notez que la constante de chaîne de caractères ne peut pas contenir de signes double-dollar.

Par exemple :

SELECT $1, $2 FROM VALUES ('row1', $$a
                                      ' \ \t
                                      \0x123 z $ $$);

+------+-------------------------------------------------------+
| $1   | $2                                                    |
|------+-------------------------------------------------------|
| row1 | a                                                     |
|      |                                           ' \ \t      |
|      |                                           \0x123 z $  |
+------+-------------------------------------------------------+