Thread: Storing Special Characters
Hi there.
This may be the wrong forum to inquire in, but I'd be grateful if I could directed in the right direction if that is the case.
I am currently using Postgresql 9.1.
I have a table in which I want to store shop names. Some of the shop names contain 'é' and '£'.
The query below works when I run it through pg_admin:
insert into retail(storename) values ('£'::character varying)
However, when I run the same query through pg_query in PHP, I get:
PHP Warning: pg_query(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xa3
I'd really like to find a solution to getting this code to work through PHP. My PHP code is correct as it executes other queries (which have no special characters) without complaint. Do I need to make any alterations in Postgresql? Is my sql wrong? What is the difference in how its executed though PgAdmin and PHP?
I've been relentlessly searching google for a solution to no avail.
Many thanks in advance.
R Clarke
Tirsdag 14. mai 2013 18.05.05 skrev Rebecca Clarke: > Hi there. > > This may be the wrong forum to inquire in, but I'd be grateful if I could > directed in the right direction if that is the case. > > I am currently using Postgresql 9.1. > > I have a table in which I want to store shop names. Some of the shop names > contain 'é' and '£'. > > The query below works when I run it through pg_admin: > > insert into retail(storename) values ('£'::character varying) > > However, when I run the same query through pg_query in PHP, I get: > > PHP Warning: pg_query(): Query failed: ERROR: invalid byte sequence for > encoding "UTF8": 0xa3 It's possibly a client encoding problem. See the PHP documentation on http://php.net/manual/en/function.pg-set-client-encoding.php regards, Leif
The UTF-8 encoding for a pound sign is 0xc2a3, not just 0xa3. You might want to make sure your PHP file is correct. If you're on Linux, you can use a command like `od --format=ax1 foo.php` to see the actual byte values. If that shows the wrong value, then the problem is your text editor is saving the file in the wrong encoding. If the value is right, then the problem is further downstream. Good luck! Paul On Tue, May 14, 2013 at 10:15 AM, Leif Biberg Kristensen <leif@solumslekt.org> wrote: > Tirsdag 14. mai 2013 18.05.05 skrev Rebecca Clarke: >> Hi there. >> >> This may be the wrong forum to inquire in, but I'd be grateful if I could >> directed in the right direction if that is the case. >> >> I am currently using Postgresql 9.1. >> >> I have a table in which I want to store shop names. Some of the shop names >> contain 'é' and '£'. >> >> The query below works when I run it through pg_admin: >> >> insert into retail(storename) values ('£'::character varying) >> >> However, when I run the same query through pg_query in PHP, I get: >> >> PHP Warning: pg_query(): Query failed: ERROR: invalid byte sequence for >> encoding "UTF8": 0xa3 > > It's possibly a client encoding problem. See the PHP documentation on > > http://php.net/manual/en/function.pg-set-client-encoding.php > > regards, Leif > > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general -- _________________________________ Pulchritudo splendor veritatis.
On 2013-05-14 19:32, Paul Jungwirth wrote: > The UTF-8 encoding for a pound sign is 0xc2a3, not just 0xa3. You > might want to make sure your PHP file is correct. Just for the record, the Unicode code point for the pound symbol (£) is actually 0x00A3. 0xC2A3 is the Hangul syllable Syuh (슣). - crl
On Wed, May 15, 2013 at 8:20 AM, CR Lender <crlender@gmail.com> wrote: > On 2013-05-14 19:32, Paul Jungwirth wrote: >> The UTF-8 encoding for a pound sign is 0xc2a3, not just 0xa3. You >> might want to make sure your PHP file is correct. > > Just for the record, the Unicode code point for the pound symbol (£) is > actually 0x00A3. 0xC2A3 is the Hangul syllable Syuh (슣). Which, in UTF-8, is represented by the byte sequence C2 A3. (The latter would be represented as EC 8A A3.) ChrisA
On 2013-05-15 00:31, Chris Angelico wrote: > Which, in UTF-8, is represented by the byte sequence C2 A3. (The > latter would be represented as EC 8A A3.) Right, my bad. I read Unicode instead of UTF-8. - crl
Thanks everyone for your help.
I changed the encoding as directed on the PHP documentation provided by Leif to LATIN1 instead of the UTF-8. This resolved the issue and the records with £ and é inserted into the database without complaint.
On Tue, May 14, 2013 at 11:36 PM, CR Lender <crlender@gmail.com> wrote:
On 2013-05-15 00:31, Chris Angelico wrote:Right, my bad.
> Which, in UTF-8, is represented by the byte sequence C2 A3. (The
> latter would be represented as EC 8A A3.)
I read Unicode instead of UTF-8.
- crl
--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general