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 holds Unicode characters.

When you declare a column of type VARCHAR, you can specify an optional parameter (N), which is the maximum number of characters to store. For example:

create table t1 (v varchar(16777216));

If no length is specified, the default is the maximum allowed length (16,777,216).

Although a VARCHAR’s maximum length is specified in characters, a VARCHAR is also limited to a maximum number of bytes (16,777,216 (16MB)). The maximum number of Unicode characters that can be stored in a VARCHAR column is shown below:

Single-byte

16,777,216.

Multi-byte

Between 8,388,608 (2 bytes per character) and 4,194,304 (4 bytes per character).

For example, if you declare a column as VARCHAR(16777216), the column can hold a maximum of 8,388,608 2-byte Unicode characters, even though you specified a maximum length of 16777216.

A column consumes storage for only the amount of actual data stored. For example, a 1-character string in a VARCHAR(16777216) column only consumes a single character.

There is no performance difference between using the full-length VARCHAR declaration VARCHAR(16777216) or a smaller length. Note that in any relational database, SELECT statements in which a WHERE clause references VARCHAR columns or string columns are not as fast as SELECT statements filtered using a date or numeric column condition.

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 litté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

xhh

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 $  |
+------+-------------------------------------------------------+