*** sgml.orig/datatype.sgml Mon Nov 19 01:05:00 2001
--- sgml/datatype.sgml Tue Nov 20 01:04:54 2001
***************
*** 965,987 ****
!
! Binary Data
! The bytea data type allows storage of binary data,
! specifically allowing storage of NULLs which are entered as
! '\\000'>. The first backslash is interpreted by the
! single quotes, and the second is recognized by bytea> and
! precedes a three digit octal value. For a similar reason, a
! backslash must be entered into a field as '\\\\'> or
! '\\134'>. You may also have to escape line feeds and
! carriage return if your interface automatically translates these. It
! can store values of any length. Bytea> is a non-standard
! data type.
Date/Time Types
--- 965,1260 ----
!
! Binary Strings
!
! The bytea data type allows storage of binary strings.
!
!
!
! Binary String Types
!
!
!
! Type Name
! Storage
! Description
!
!
!
!
! bytea
! 4 bytes plus the actual string
! Variable (not specifically limited)
! length binary string
!
!
!
!
!
!
! A binary string is a sequence of octets that does not have either a
! character set or collation associated with it. Bytea specifically
! allows storage of NULLs and other 'non-printable' ASCII
! characters.
!
!
!
! Certain ASCII characters MUST be escaped (but all
! characters MAY be escaped) when used as part of a string literal in an
! SQL statement. In general, to escape a character, it
! is converted into the three digit octal number equal to the decimal
! ASCII value, and preceeded by two backslashes. The
! single quote (') and backslash (\) characters have special alternate
! escape sequences. Details are in
! .
!
!
!
! SQL Literal Escaped ASCII
! Characters
!
!
!
! Decimal ASCII Value
! Description
! Input Escaped Representation
! Example
! Printed Result
!
!
!
!
!
! 0
! null byte
! '\\000'
! select '\\000'::bytea;
! \000
!
!
!
! 39
! single quote
! '\\'' or '\\047'
! select '\''::bytea;
! '
!
!
!
! 92
! backslash
! '\\\\' or '\\134'
! select '\\\\'::bytea;
! \\
!
!
!
!
!
!
!
! Note that the result in each of the examples above was exactly one
! byte in length, even though the output representation of the null byte
! and backslash are more than one character. Bytea output characters
! are also escaped. In general, each "non-printable" character is
! converted into the three digit octal number equal to its decimal
! ASCII value, and preceeded by one backslash. Most
! "printable" characters are represented by their standard
! ASCII representation. The backslash (\) character
! has a special alternate output representation. Details are in
! .
!
!
!
! SQL Output Escaped ASCII
! Characters
!
!
!
! Decimal ASCII Value
! Description
! Output Escaped Representation
! Example
! Printed Result
!
!
!
!
!
!
! 39
! single quote
! '
! select '\\047'::bytea;
! '
!
!
!
! 92
! backslash
! \\
! select '\\134'::bytea;
! \\
!
!
!
! 0 to 31 and 127 to 255
! non-printable characters
! \### (octal value)
! select '\\001'::bytea;
! \001
!
!
!
! 32 to 126
! printable characters
! ASCII representation
! select '\\176'::bytea;
! ~
!
!
!
!
!
!
!
! SQL string literals (input strings) must be
! preceeded with two backslashes due to the fact that they must pass
! through two parsers in the PostgreSQL backend. The first backslash
! is interpreted as an escape character by the string literal parser,
! and therefore is consumed, leaving the characters that follow it.
! The second backslash is recognized by bytea> input function
! as the prefix of a three digit octal value. For example, a string
! literal passed to the backend as '\\001' becomes
! '\001' after passing through the string literal
! parser. The '\001' is then sent to the bytea
! input function, where it is converted to a single byte with a decimal
! ASCII value of 1.
!
!
!
! For a similar reason, a backslash must be input as
! '\\\\' (or '\\134'). The first
! and third backslashes are interpreted as escape characters by the
! string literal parser, and therefore are consumed, leaving the
! second and forth backslashes untouched. The second and forth
! backslashes are recognized by bytea> input function as a single
! backslash. For example, a string literal passed to the backend as
! '\\\\' becomes '\\' after passing
! through the string literal parser. The '\\' is then
! sent to the bytea input function, where it is converted to a single
! byte with a decimal ASCII value of 92.
!
!
!
! A single quote is a bit different in that it must be input as
! '\'' (or '\\134'), NOT as
! '\\''. This is because, while the literal parser
! interprets the single quote as a special character, and will consume
! the single backslash, the bytea input function does NOT recognize
! a single quote as a special character. Therefore a string
! literal passed to the backend as '\'' becomes
! ''' after passing through the string literal
! parser. The ''' is then sent to the bytea
! input function, where it is retains its single byte decimal
! ASCII value of 39.
!
! Depending on the front end to PostgreSQL you use, you may have
! additional work to do in terms of escaping and unescaping bytea
! strings. For example, you may also have to escape line feeds and
! carriage return if your interface automatically translates these.
! Or you may have to double up on backslashes if the parser for your
! language or choice also treats them as an escape character.
+
+
+ Compatibility
+
+ Bytea provides most of the functionality of the SQL99 binary string
+ type per SQL99 section 4.3. A comparison of PostgreSQL bytea and SQL99
+ Binary Strings is presented in
+ .
+
+
+
+ Comparison of SQL99 Binary String and 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
+ hexidecimal digits, in single quotes, preceeded by "X",
+ e.g. X'1a43fe'
+ A binary string literal is comprised of ASCII characters
+ escaped according to the rules shown in
+
+
+
+
+
+
+
Date/Time Types