FirebirdSQL logo

Littérales de chaînes de caractères

Une chaîne de caractères est une séquence de caractères placée entre deux apostrophes (“guillemets simples”). La longueur maximale d’une constante de chaîne est de 65535 octets ; le nombre maximal de caractères sera déterminé par le nombre d’octets utilisés pour coder chaque caractère.

Syntaxe:
<character string literal> ::=
  [ <introducer> <character set specification> ]
    <quote> [ <character representation>... ] <quote>
    [ { <separator> <quote> [ <character representation>... ] <quote> }... ]

<separator> ::=
  { <comment> | <white space> }

<introducer> ::= underscore (U+005F)

<quote> ::= apostrophe (U+0027)

<char> ::= character representation;
l'apostrophe est échappée en la doublant
Example 1. Chaîne littérale simple
'Hello world'

Si une apostrophe littérale est requise dans une constante de chaîne, elle peut être "protégée" par une autre apostrophe qui la précède.

Example 2. Chaîne littérale contenant une apostrophe
'Mother O''Reilly''s home-made hooch'

Une autre façon d’écrire cette chaîne littérale est d’utiliser des guillemets alternatifs :

q'{Mother O'Reilly's home-made hooch}'

Un littéral de chaîne peut être "terminé" par un espace ou un commentaire si nécessaire.Cela peut être utilisé pour diviser un long littéral en plusieurs lignes ou pour fournir des commentaires en ligne.

Example 3. Chaînes littérales interrompues par un espace et un commentaire
-- Des espaces entre les caractères littéraux
select 'ab'
       'cd'
from RDB$DATABASE;
-- sortie: 'abcd'

-- Des espaces entre les commentaires littéraux
select 'ab' /* comment */ 'cd'
from RDB$DATABASE;
-- sortie: 'abcd'
Note
  • Les guillemets doubles devraient ne pas (autorisés par 1 dialecte) être utilisés pour le quota de chaînes. Dans SQL, ils sont fournis à d’autres fins.

  • Si une apostrophe littérale est requise dans une constante de chaîne, elle peut être "`screened'" par une autre apostrophe précédente. Par exemple,"Mother O''Reilly’s home-made hooch". Ou utilisez des guillemets alternés pour les littéraux : q'{Mother O''Reilly's home-made hooch}'.

  • Il faut faire attention à la longueur de la chaîne si la valeur doit être écrite dans une colonne de type VARCHAR. La longueur maximale de la chaîne pour le type VARCHAR est de 32765 octets (32767 pour le type CHAR). Si la valeur doit être écrite dans une colonne de type BLOB, la longueur maximale de la chaîne littérale est de 65535 octets.

On suppose que le jeu de caractères de la constante chaîne est le même que celui de la colonne dans laquelle elle est stockée.

Constantes de chaîne en notation hexadécimale

Depuis Firebird 2.5, les constantes de type chaîne peuvent être écrites en notation hexadécimale, ce que l’on appelle des “chaînes binaires”.Chaque paire de chiffres hexadécimaux définit un octet dans la chaîne.Les chaînes de caractères entrées de cette façon auront l’encodage OCTETS par défaut,Mais introducer syntax peut être utilisé pour forcer la chaîne à être interprétée dans un jeu de caractères différent.

Syntaxe:
{x|X}'<hexstring>'

<hexstring> ::= an even number of <hexdigit>

<hexdigit> ::= 0..9 | A..F | a..f
Example 1. Exemples:
SELECT x'4E657276656E' FROM rdb$database
-- returns 4E657276656E, a 6-byte 'binary' string

SELECT _ascii x'4E657276656E' FROM rdb$database
-- returns 'Nerven' (same string, now interpreted as ASCII text)

SELECT _iso8859_1 x'53E46765' FROM rdb$database
-- returns 'Säge' (4 chars, 4 bytes)

SELECT _utf8 x'53C3A46765' FROM rdb$database
-- returns 'Säge' (4 chars, 5 bytes)
Note

La façon dont les chaînes binaires sont affichées dépend de l’interface client.Par exemple, l’utilitaire isql utilise les lettres majuscules A-F, tandis que FlameRobin utilise les lettres minuscules.D’autres peuvent utiliser d’autres règles de conversion, comme l’affichage d’espaces entre les paires d’octets : "4E 65 72 76 65 6E".

La notation hexadécimale permet d’insérer n’importe quel octet (y compris 00) à n’importe quelle position dans une chaîne.

Un littéral peut contenir des espaces pour séparer les caractères hexadécimaux.Un littéral de chaîne peut être "terminé" par un espace ou un commentaire si nécessaire.Cela peut être utilisé pour rendre une chaîne hexadécimale plus lisible en regroupant les caractères,ou pour diviser un long littéral en plusieurs lignes, ou encore pour fournir des commentaires en ligne.

Example 2. Littéral binaire interrompu par un espace
-- Groupe par octet (espace à l'intérieur du littéral)
select _win1252 x'42 49 4e 41 52 59'
from RDB$DATABASE;
-- sortie: BINARY

-- Espacement entre les caractères littéraux
select _win1252 x'42494e'
                 '415259'
from RDB$DATABASE;
-- sortie: BINARY