Hendrik Schumacher wrote:
> At the first glance you may be using a non-unicode database connection. In
> this case
>
> $dbh->do ("set names 'utf8'");
>
> may help.
>
> Hendrik
Are you sure that is a "SQL Server 2008" statement? I thought that was a
mysql thing.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com
> Am Di, 29.09.2009, 16:39, schrieb Stephan Austermühle:
>> Hi all,
>>
>> maybe I do not to see the wood for the trees...
>>
>> All I want to do is to process strings with special characters (e.g.,
>> Umlauts), i.e. INSERT and SELECT them from my database (SQL
>> Server 2008).
>>
>> Querying strings with special characters works fine now:
>>
>> $ locale |grep ^LC_CTYPE
>> LC_CTYPE="en_US.UTF-8"
>>
>> Perl code:
>>
>> binmode(STDIN, ':utf8');
>> binmode(STDOUT, ':utf8');
>> binmode(STDERR, ':utf8');
>> ...
>>
>> $st = $dbh->prepare(q/SELECT id, name FROM foo/);
>> $st->execute() || croak("Cannot SELECT");
>>
>> while (my $r = $st->fetchrow_hashref()) {
>> printf("%3d %s\n", $r->{'id'}, $r->{'name'});
>> }
>> $dbh->commit();
>>
>> Result:
>>
>> 1 Gänz vüle Ã*mläute und Ã*eugs
>>
>> Okay, SELECTing works (unless "use encoding 'utf8'" is given).
>>
>> Now the other way. Insert a row and fill a column with a string containing
>> special characters:
>>
>> $st = $dbh->prepare(q/INSERT INTO foo (name) VALUES (?)/);
>> $st->execute("süÃ*") || croak("Cannot INSERT");
>> $dbh->commit();
>> ...
>>
>> Result: Column 'name' is empty (but not NULL). Tracing shows
>>
>> Unicode login6
>> dbname=DSN=XXX;MARS_Connection=Yes, uid='XXX', pwd=XXX
>> Now using dbname = DSN=XXX;MARS_Connection=Yes;UID=XXX;PWD=XXX;
>> SQLDriverConnect 'DSN=XXX;MARS_Connection=Yes;UID=XXX;PWD=XXX;',
>> ''XXX'', 'XXX'
>> Out connection string: DSN=XXX;MARS_Connection=Yes;UID=XXX;PWD=XXX;
>> Turning autocommit on
>> DRIVER_ODBC_VER = 03.00
>> DRIVER_NAME = libtdsodbc.so
>> DRIVER_VERSION = 0.82.1.dev.20090904
>> MAX_COLUMN_NAME_LEN = 128
>> DBD::ODBC is unicode built : YES
>> Deferring Binding
>> SQL_DBMS_NAME = Microsoft SQL Server
>> SQLMoreResults supported: 1
>> SQLDescribeParam supported: 0
>> SQLDescribeParam supported: 0
>> unicode support = 1
>> Processing non-utf8 sql in unicode mode
>> Processing non-utf8 sql in unicode mode
>>
>> Can you give me a hint how to handle special characters with Perl and
>> DBD::ODBC?
>>
>> Setup:
>>
>> - Perl 5.8.9
>> - FreeTDS v0.82.1.dev.20090904 (Unicode build)
>> - unixODBC 2.2.14
>> - DBD::ODBC 1.23 (Unicode build)
>>
>> Thanks and regards,
>>
>> Stephan
>>
>>
>
>
>