Commit ab79444e authored by Bruce Momjian's avatar Bruce Momjian

Add "(assuming <varname>standard_conforming_strings</> is

<literal>off</>)" clauses for bytea.
parent 5f78aa5a
<!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.180 2006/10/23 18:10:30 petere Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.181 2006/11/23 04:27:33 momjian Exp $ -->
<chapter id="datatype"> <chapter id="datatype">
<title id="datatype-title">Data Types</title> <title id="datatype-title">Data Types</title>
...@@ -1097,15 +1097,17 @@ SELECT b, char_length(b) FROM test2; ...@@ -1097,15 +1097,17 @@ SELECT b, char_length(b) FROM test2;
</para> </para>
<para> <para>
When entering <type>bytea</type> values, octets of certain values When entering <type>bytea</type> values, octets of certain
<emphasis>must</emphasis> be escaped (but all octet values values <emphasis>must</emphasis> be escaped (but all octet
<emphasis>can</emphasis> be escaped) when used as part of a string values <emphasis>can</emphasis> be escaped) when used as part
literal in an <acronym>SQL</acronym> statement. In general, to of a string literal in an <acronym>SQL</acronym> statement. In
escape an octet, it is converted into the three-digit octal number general, to escape an octet, it is converted into the three-digit
equivalent of its decimal octet value, and preceded by two octal number equivalent of its decimal octet value, and preceded
backslashes. <xref linkend="datatype-binary-sqlesc"> shows the by two backslashes (or one backslash if
characters that must be escaped, and gives the alternate escape <varname>standard_conforming_strings</> is <literal>off</>).
sequences where applicable. <xref linkend="datatype-binary-sqlesc"> shows the characters
that must be escaped, and gives the alternate escape sequences
where applicable.
</para> </para>
<table id="datatype-binary-sqlesc"> <table id="datatype-binary-sqlesc">
...@@ -1168,24 +1170,25 @@ SELECT b, char_length(b) FROM test2; ...@@ -1168,24 +1170,25 @@ SELECT b, char_length(b) FROM test2;
</para> </para>
<para> <para>
The reason that you have to write so many backslashes, as shown in The reason that you have to write so many backslashes, as shown
<xref linkend="datatype-binary-sqlesc">, is that an input string in <xref linkend="datatype-binary-sqlesc">, is that an input
written as a string literal must pass through two parse phases in string written as a string literal must pass through two parse
the <productname>PostgreSQL</productname> server. The first phases in the <productname>PostgreSQL</productname> server.
backslash of each pair is interpreted as an escape character by The first backslash of each pair is interpreted as an escape
the string-literal parser and is therefore consumed, leaving the character by the string-literal parser (assuming
second backslash of the pair. The remaining backslash is then <varname>standard_conforming_strings</> is <literal>off</>)
recognized by the <type>bytea</type> input function as starting and is therefore consumed, leaving the second backslash of the
either a three digit octal value or escaping another backslash. pair. The remaining backslash is then recognized by the
For example, a string literal passed to the server as <type>bytea</type> input function as starting either a three
<literal>'\\001'</literal> becomes <literal>\001</literal> after digit octal value or escaping another backslash. For example,
passing through the string-literal parser. The a string literal passed to the server as <literal>'\\001'</literal>
<literal>\001</literal> is then sent to the <type>bytea</type> becomes <literal>\001</literal> after passing through the
input function, where it is converted to a single octet with a string-literal parser. The <literal>\001</literal> is then sent
decimal value of 1. Note that the apostrophe character is not to the <type>bytea</type> input function, where it is converted
treated specially by <type>bytea</type>, so it follows the normal to a single octet with a decimal value of 1. Note that the
rules for string literals. (See also <xref apostrophe character is not treated specially by <type>bytea</type>,
linkend="sql-syntax-strings">.) so it follows the normal rules for string literals. (See also
<xref linkend="sql-syntax-strings">.)
</para> </para>
<para> <para>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment