| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Types | Next >>> |
Le type bytea permet le stockage de chaînes binaires.
Table 6. Types chaîne binaire
| Nom du type | Stockage | Description |
|---|---|---|
| bytea | 4 octets plus la chaîne binaire actuelle | Chaîne binaire (non spécifiquement limitée) de longueur variable |
Une chaîne binaire est une suite d'octets qui ne possède pas, ou un ensemble de caractères, ou une collation associée à elle.Bytea permet le stockage d'octets de valeur zero et autres octets "non-imprimables".
Les octets de certaines valeurs doivent être échappés (mais toutes les valeurs d'octet peuvent être échappées) quand ils sont utilisés comme partie d'une chaîne littérale dans une clause SQL. En général, pour échapper un octet, il est converti en un nombre octal à trois chiffres équivalent à sa valeur en octet décimal, et précédé de deux backslashes (\\). Certaines valeurs d'octet ont des séquences d'échappement alternatives, comme indiqué en Table 7.
Table 7. Octets échappés en SQLlittéral
| Valeur en octet décimal | Description | Entrées échappées | Exemple | Résultat affiché |
|---|---|---|---|---|
| 0 | zero octet | '\\000' | select '\\000'::bytea; | \000 |
| 39 | single quote | '\\'' or '\\047' | select '\''::bytea; | ' |
| 92 | backslash | '\\\\' or '\\134' | select '\\\\'::bytea; | \\ |
Notez que le résultat de chacun des exemples ci-dessus est d'exactement un octet de long, bien que la représentation à l'affichage du zero octet et du backslash soient de plus d'un caractère. Les octets de Bytea sont aussi échappés. En général, chaque valeur d'octet décimale "non-imprimable" est convertie en son équivalent en valeur octale à trois chiffres, et précédée par un backslash. La plupart des octets "imprimables" sont affichés par leur représentation standard dans le jeu de caractères du client. L'octet avec la valeur décimale 92 (backslash) possède un affichage alternatif particulier. Détails en Table 8.
Table 8. Affichage des octets échappés SQL
| Valeur d'octet décimal | Description | Représentation de sorties échappées | Exemple | Résultat affiché |
|---|---|---|---|---|
| 92 | backslash | \\ | select '\\134'::bytea; | \\ |
| 0 to 31 and 127 to 255 | "non-printable" octets | \### (octal value) | select '\\001'::bytea; | \001 |
| 32 to 126 | "printable" octets | ASCII representation | select '\\176'::bytea; | ~ |
Les chaînes littérales SQL (chaînes d'entrée) doivent être précédées de deux backslashes ce qui est dû au fait qu'elles doivent passer à travers deux analyseurs au niveau du serveur PostgreSQL. Le premier backslash est interprété comme un caractère d'échappement par l'analyseur de chaîne, et par conséquent consommé, laissant les octets qui suivent. Le backslash restant est reconnu par la fonction entrée bytea comme préfixe d'une valeur octale à trois chiffres. Par exemple, une chaîne littérale passée au serveur comme '\\001' devient '\001' après être passée par l'analyseur parser. Le '\001' est alors envoyé à la fonction bytea, où il est converti en un seul octet avec une valeur décimale de 1.
Pour une raison similaire, un backslash doit être entré comme '\\\\' (ou '\\134'). Le premier et le troisième backslash sont interprétés comme caractères d'échappement par l'analyseur, et par conséquent consommés, laissant deux backslashes dans la chaîne passée à la fonction entrée bytea, qui les interprète comme représentant un simple backslash. Par exemple, une chaîne passée au serveur comme '\\\\' devient '\\' après être passée par l'analyseur. Le '\\' est alors envoyé à la fonction bytea où il est converti en un simple octet avec une valeur décimale de 92.
L'apostrophe est un peu différent en ce qu'il doit être entré comme '\'' (ou '\\134'), non comme '\\''. Ceci parce que, tandis que l'analyseur interprète les apostrophes comme caractères spéciaux, and will consomme le backslash unique, la fonction entrée bytea ne reconnaît pas l'apostrophe comme octet spécial. Donc, une chaîne littérale passée au serveur comme '\'' devient ''' après être passée par l'analyseur de chaîne. Le ''' est alors envoyé à la fonction entrée bytea où il est vu comme simple octet décimal de valeur 39.
En fonction du client Postgres que vous utilisez, vous pouvez avoir d'autres choses à faire en termes d'échappement et non échappement de chaînes bytea. Par exemple, vous pouvez aussi avoir à échapper des suites de lignes et des retours chariots si votre interface ne le fait pas automatiquement. Ou vous pouvez avoir à doubler les backslashes si votre langage les traite comme caractères d'échappement.
Bytea procure la plupart des fonctionnalités du type chaîne binaire du SQL99 section 4.3. Une comparaison des chaînes binaires SQL99 et du bytea de PostgreSQL est présentée en Table 9.
Table 9. Comparaison chaîne binaire SQL99 et PostgreSQL BYTEA types
| SQL99 | BYTEA |
|---|---|
| Name of data type BINARY LARGE OBJECT or BLOB | Name of data type BYTEA |
| Sequence of octets that does not have either a character set or collation associated with it. | same |
| Described by a binary data type descriptor containing the name of the data type and the maximum length in octets | Described by a binary data type descriptor containing the name of the data type with no specific maximum length |
| All binary strings are mutually comparable in accordance with the rules of comparison predicates. | same |
| Binary string values can only be compared for equality. | Binary string values can be compared for equality, greater than, greater than or equal, less than, less than or equal |
| Operators operating on and returning binary strings include concatenation, substring, overlay, and trim | Operators operating on and returning binary strings include concatenation, substring, and trim. The leading and trailing arguments for trim are not yet implemented. |
| Other operators involving binary strings include length, position, and the like predicate | same |
| A binary string literal is comprised of an even number of hexadecimal digits, in single quotes, preceded by "X", e.g. X'1a43fe' | A binary string literal is comprised of octets escaped according to the rules shown in Table 7 |
| <<< Previous | Home | Next >>> |
| Types caractère | Up | Types Date/Time |