in reply to Re^4: Avoiding Strange Win32::ODBC Return Values for Integers
in thread Avoiding Strange Win32::ODBC Return Values for Integers (NUL)

I don't know why you're getting a NUL (ASCII character 0) in your output, but here's how we can get rid of it:
my $nul = chr(0); $value =~ s/$nul//g;
I would suggest that for all of the values coming out of the database; it's pretty likely that you don't want NULs in your output.

thor

Feel the white light, the light within
Be your own disciple, fan the sparks of will
For all of us waiting, your kingdom will come

Replies are listed 'Best First'.
Re^6: Avoiding Strange Win32::ODBC Return Values for Integers
by jonix (Friar) on Oct 28, 2005 at 19:19 UTC
    Yes, thanks - this must be it!
    I will try it asap (after the weekend when I come back to my script) and also take the concise cleaning with regex approach :)

    Some questions still remain though:
    Is MSSQL, the ODBC Driver or Win32::ODBC introducing the NUL values?
    Is it a bug or a feature?

    Thanks again,
    jonix
      Is MSSQL, the ODBC Driver or Win32::ODBC introducing the NUL values?
      I don't know, but MS-SQL you say? Is there any reason not to use DBI with DBD::ODBC? I don't know anything about Win32::ODBC, but I do know that I've used DBI with MS-SQL to great effect. If it's feasible, you might give this a shot. All things considered, having to clean the data is somewhat undesirable (though I'm sure someone will chime in with the fact that data from the database is marked as tainted, etc). Numbers should come back as numbers, not numbers with a NUL appended...

      thor

      Feel the white light, the light within
      Be your own disciple, fan the sparks of will
      For all of us waiting, your kingdom will come

        Is there any reason not to use DBI with DBD::ODBC?
        No real reason for not using it, though I did not like the way of preparing SQL with questionmark placeholders at first sight:
        $sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");
        SQL is just text, Perl can manipulate it fairly well like in "... where baz=$baz"!
        Skipping once more through the DBI docs, I understood now that it is for the benefit of preparing the SQL string once while substituting the variables as often as you like?!

        Win32::ODBC looked much simpler, cleaner and easier for me, without the preparation overhead...

        But before you start more effort now to convince me to use the much more powerful and popular DBI instead, I promise I will try it - at least to have a look if it returns NUL terminated integers as well in my case ;)

        Cheers,
        jonix