[prev] [thread] [next] [Date index for 2005/11/21]
Hi Brian,
Brian Phillips wrote:
> You can avoid the "set names..." trick by indicating in your my.cnf
> file that you want the default character set for the connection to be
> utf8. For instance, in a my.cnf file somewhere on your system
> (/var/lib/mysql/my.cnf on mine), place the following:
>
> [perl]
> default-character-set=utf8
>
> And then when you specify your connection in your Class::DBI module,
> you'll need to do something like the following:
>
> __PACKAGE__->connection(
> 'dbi:mysql:localhost;mysql_read_default_group=perl;mysql_read_default_file=/var/lib/mysql/my.cnf'
> );
>
> This keeps the MySQL server from translating data in the DB from utf8
> (which is how it's stored) into latin1 (or whatever the default
> character set of the client is). Executing a 'set names utf8'
> accomplishes the same thing but this method avoids having to run that
> query everytime you connect.
>
I've done that, but in itself it doesn't suffice to set the character
set straight.
I've tried the same code without Class::DBI in a script that runs just
plain DBI:
$dbh =
db_connect("localhost;mysql_read_default_group=perl;mysql_read_default_file=/etc/my.cnf",
"$db", "$usr", "$pwd");
This *doesn't* replace "set names utf8" - if I leave out "set names
utf8", utf8 just doesn't get displayed correctly.
Have I used a wrong syntax?
With Class::DBI, I tried this:
ILKB::DBI->connection("dbi:mysql:ilkb_test;mysql_read_default_group=mysql;mysql_read_default_file=/etc/my.cnf",'$usr','$pwd');
> Even after that, you still need to tell Perl that the data is utf8
> encoded using Encode (this is messy code, someone can probably point
> out a better way of doing this):
>
> __PACKAGE__->add_trigger(
> select => sub {
> my $obj = shift;
> foreach (qw( my_text_column1 my_text_column2 )) {
> if ( $obj->_attribute_exists($_) ) {
> Encode::_utf8_on( $obj->{$_} );
> }
> }
> }
> );
>
>
I presume it wouldn't just have to be called on select, but also on
insert and update. Would I have to list all text columns separately or
could I just set the trigger on all columns?
Also: would this behaviour be inherited? If I have to manually specify
the columns, I guess not.
I'm asking because I have probably about 30 or so classes, and would
prefer some centralized code.
Thanks for the advice,
best regards,
Birgit
_______________________________________________
ClassDBI mailing list
ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx
http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
|
[CDBI] Set utf8 character set on class connection?
|
|
Re: [CDBI] Set utf8 character set on class connection?
|
Generated at 21:49 on 21 Nov 2005 by mariachi v0.52