http://www.perlmonks.org?node_id=1025159


in reply to Re: PgPP invalid byte seqnence for encoding UTF8
in thread PgPP invalid byte seqnence for encoding UTF8

That did take care of the encoding error tho I don't understand why because I thought Perl was natively UTF-8. Anyway it works.

But now when I try to use that value to update a record like so:

my $sth = $dbh->prepare("update userinfo set description=? where uid=$ +uid"); $sth->execute(encode('UTF-8',$userdata->[$i]->{description})) || die $ +sth->errstr;
I get DBD::PgPP::st execute failed: ERROR:  array value must start with "{" or dimension information at character 33

This is confusing as the string is En démocratie, on a le droit d'avoir tort and character 33 is either an "a" or a "v" depending on whether it's counting form zero.

Replies are listed 'Best First'.
Re^3: PgPP invalid byte seqnence for encoding UTF8
by McA (Priest) on Mar 24, 2013 at 18:07 UTC

    Hi,

    I'm pretty sure it has nothing to do with encoding but with the way the related columns are defined. Please, show use your table definition of userinfo.

    McA

      Here it is

      Table "public.user info" Column | Type | Modifiers | Storage | Description ------------------+------------------------------- +-----------+----------+------------- uid | integer | not null | plain | screen_name | character varying | not null | extended | user_name | character varying | not null | extended | location | character varying | | extended | user_language | character varying | | extended | favourites_count | integer | | plain | followers_count | integer | | plain | friends_count | integer | | plain | status_count | integer | | plain | listed_count | integer | | plain | created_at | character varying | | exten ded | time_zone | character varying | | exten ded | user_url | character varying | | exten ded | description | text[] | | exten ded | added_on | timestamp without time zone[] | | exten ded | Indexes: "pk_user" PRIMARY KEY, btree (uid) Rules: my_table_on_duplicate_ignore AS ON INSERT TO userinfo WHERE (EXISTS ( SELECT 1 FROM userinfo WHERE userinfo.uid = new.uid)) DO INSTEAD NOTHING Has OIDs: no
      Maybe the problem is the brackets after the text type? Those were inserted when I created the column with pgadminIII.

        I don't know psql well, but as far as I know, you introduced an array type for column description. I don't know how to feed the data for an array type via DBI. But that is something different than the initial question.

        McA