Thread: Storing Special Characters

Storing Special Characters

From
Rebecca Clarke
Date:
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



Re: Storing Special Characters

From
Leif Biberg Kristensen
Date:
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


Re: Storing Special Characters

From
Paul Jungwirth
Date:
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.


Re: Storing Special Characters

From
CR Lender
Date:
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


Re: Storing Special Characters

From
Chris Angelico
Date:
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


Re: Storing Special Characters

From
CR Lender
Date:
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


Re: Storing Special Characters

From
Rebecca Clarke
Date:
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:
> 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


--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general