On Tuesday 04 March 2008, Shmuel Fomberg wrote: > Hi All. > > I have a table in MySQL, that I access using Class::DBI, which contains > names.
First of all a question - is there any reason you prefer Class::DBI over DBIx::Class which is: 1. Similar. 2. Newer. 3. Better. 4. Generally considered preferable - see http://www.perlmonks.org/?node_id=557402 . =================== I was able to get DBIx::Class to work with Unicode by using the advice here: http://dev.mysql.com/tech-resources/articles/4.1/unicode.html and the following script: {{{{{{{{{{{{{{{{{ #!/usr/bin/perl use strict; use warnings; package DB::Main::Artist; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto Core/); __PACKAGE__->table('artist'); __PACKAGE__->add_columns(qw/ artistid name /); __PACKAGE__->set_primary_key('artistid'); 1; package DB::Main; use base qw/DBIx::Class::Schema/; __PACKAGE__->load_classes("Artist"); 1; package main; use utf8; my $schema = DB::Main->connect("DBI:mysql:database=test_shmuel_hebrew"); my $artist = $schema->resultset("Artist")->create({name => "שמואל"}); my @all_results = $schema->resultset('Artist')->all(); # binmode STDOUT, ":utf8"; foreach my $artist (@all_results) { print $artist->name(), "\n"; } }}}}}}}}}}}}}}}}}}}}}}} Here is my session of trial and error until I got it to work: {{{{{{{{{{{{{{ shlomi:~$ cd progs/perl/ shlomi:~/progs/perl$ ls 3d distros gimp old POD-Revamp snippets XML 4Advent Docs gtk osp_rules Quizes Subversion yacc arcs du-s.txt itself p1.pl Rindolf test.txt conv_cell Extract-Method.pl math Parrot sdl v6 Core file mazes patches self-eval Winapt cpan forums net PDL server www shlomi:~/progs/perl$ cd snippets/ shlomi:~/progs/perl/snippets$ ls a-b-regex.t goedel-oo-test.pl test.pl analyse.pl implicit-self test-state-vars.pl apps-as-modules io-file-test.pl test-state-vars.pl~ attributes Module-Pluggable test-subject.pl Closure-as-Method myfile.txt timer.pl delegate MyProxy time-various-line-counts.pl find-max-range.pl [EMAIL PROTECTED] trap-stdout.pl fractran.pl test-amazon.pl xmms-xchat-integration function-call-backslash-G test-fifo.pl shlomi:~/progs/perl/snippets$ mkdir DBIx-Class-Hebrew shlomi:~/progs/perl/snippets$ cd DBIx-Class-Hebrew/ shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ sl bash: sl: command not found shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ ls shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ ls shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ gvim dbix-class.pl shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysqladmin create test_shmuel_hebrew shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysql test_shmuel_hebrew Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 270 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE artist (artistid INT PRIMARY KEY AUTO_INCREMENT, name varchar(255)); Query OK, 0 rows affected (0.02 sec) mysql> Bye shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysql test_shmuel_hebrew Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 275 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE artists (artistid INT PRIMARY KEY AUTO_INCREMENT, name varchar(255)); Query OK, 0 rows affected (0.04 sec) mysql> Bye shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl -d dbix-class.pl Loading DB routines from perl5db.pl version 1.3 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. DB::Main::(dbix-class.pl:10): __PACKAGE__->load_classes(); DB<1> n DB::Main::(dbix-class.pl:12): 1; DB<1> n DB::Main::Artist::(dbix-class.pl:18): 18: __PACKAGE__->load_components(qw/PK::Auto Core/); DB<1> n DB::Main::Artist::(dbix-class.pl:19): 19: __PACKAGE__->table('artist'); DB<1> n DB::Main::Artist::(dbix-class.pl:20): 20: __PACKAGE__->add_columns(qw/ artistid name /); DB<1> n DB::Main::Artist::(dbix-class.pl:21): 21: __PACKAGE__->set_primary_key('artistid'); DB<1> n DB::Main::Artist::(dbix-class.pl:23): 23: 1; DB<1> n main::(dbix-class.pl:29): my $schema = DB::Main->connect("DBI:mysql:database=test_shmuel_hebrew"); DB<1> n main::(dbix-class.pl:31): $schema->resultset("Artist")->new({name => "שמואל"}); DB<1> x $schema 0 DB::Main=HASH(0x86fb510) 'storage' => DBIx::Class::Storage::DBI=HASH(0x84bf290) '_connect_info' => ARRAY(0x84bf5d0) 0 'DBI:mysql:database=test_shmuel_hebrew' '_dbh_gen' => 0 '_dbi_connect_info' => ARRAY(0x889f490) 0 'DBI:mysql:database=test_shmuel_hebrew' '_in_dbh_do' => 0 '_sql_maker' => undef '_sql_maker_opts' => HASH(0x8503e58) empty hash 'cursor' => 'DBIx::Class::Storage::DBI::Cursor' 'debugobj' => DBIx::Class::Storage::Statistics=HASH(0x88a6770) 'debugfh' => IO::File=GLOB(0x88d3f78) -> *Symbol::GEN0 FileHandle({*Symbol::GEN0}) => fileno(3) 'schema' => DB::Main=HASH(0x86fb510) -> REUSED_ADDRESS 'transaction_depth' => 0 DB<2> q shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 32 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl Can't locate object method "source_name" via package "DB::Main::Artist" at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Schema.pm line 300. shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Schema::resultset(): Can't find source for Artist at dbix-class.pl line 31 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysql test_shmuel_hebrew Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 294 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM artist ; Empty set (0.00 sec) mysql> SELECT * FROM artists ; Empty set (0.01 sec) mysql> Bye shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl DBIx::Class::Relationship::CascadeActions::update(): Not in database at dbix-class.pl line 32 shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl -d dbix-class.pl Loading DB routines from perl5db.pl version 1.3 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. DB::Main::Artist::(dbix-class.pl:10): 10: __PACKAGE__->load_components(qw/PK::Auto Core/); DB<1> c at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Exception.pm line 53 DBIx::Class::Exception::throw('DBIx::Class::Exception', 'DBIx::Class::Exception=HASH(0x89926b0)', 0) called at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Schema.pm line 919 DBIx::Class::Schema::throw_exception('DB::Main=HASH(0x84bebc0)', 'DBIx::Class::Exception=HASH(0x89926b0)') called at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Storage.pm line 125 DBIx::Class::Storage::throw_exception('DBIx::Class::Storage::DBI::mysql=HASH(0x84bee20)', 'DBIx::Class::Exception=HASH(0x89926b0)') called at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Storage/DBI.pm line 625 DBIx::Class::Storage::DBI::txn_do('DBIx::Class::Storage::DBI::mysql=HASH(0x84bee20)', 'CODE(0x84bf250)') called at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Schema.pm line 728 DBIx::Class::Schema::txn_do('DB::Main=HASH(0x84bebc0)', 'CODE(0x84bf250)') called at dbix-class.pl line 32 Debugged program terminated. Use q to quit or R to restart, use o inhibit_exit to avoid stopping after program termination, h q, h R or h o to get additional info. DB<1> q shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl ש×××× shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl | gvim - shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ Vim: Reading from stdin... shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl שמואל שמואל שמואל shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysql test_shmuel_hebrew Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 315 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM artists ; Empty set (0.00 sec) mysql> SELECT * FROM artist ; +----------+-----------------------+ | artistid | name | +----------+-----------------------+ | 1 | שמו×ל | | 2 | שמו×ל | | 3 | שמו×ל | +----------+-----------------------+ 3 rows in set (0.00 sec) mysql> ALTER TABLE artist MODIFY name VARCHAR(255) CHARACTER SET utf8; Query OK, 3 rows affected (0.03 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM artist ; +----------+-----------------------+ | artistid | name | +----------+-----------------------+ | 1 | שמו×ל | | 2 | שמו×ל | | 3 | שמו×ל | +----------+-----------------------+ 3 rows in set (0.00 sec) mysql> Bye shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ mysql test_shmuel_hebrew Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 319 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> DELETE FROM artist ; Query OK, 3 rows affected (0.01 sec) mysql> Bye shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl שמואל shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl שמואל שמואל shlomi:~/progs/perl/snippets/DBIx-Class-Hebrew$ perl dbix-class.pl שמואל שמואל שמואל }}}}}}}}}}}}}}}}}}}}}}}}}}}} Regards, Shlomi Fish --------------------------------------------------------------------- Shlomi Fish [EMAIL PROTECTED] Homepage: http://www.shlomifish.org/ I'm not an actor - I just play one on T.V. _______________________________________________ Perl mailing list [email protected] http://perl.org.il/mailman/listinfo/perl
