Mailing List Archive

DBD::SQLite WAS Re: "use v5.36.0" should imply UTF-8 encoded source
> On Aug 2, 2021, at 4:28 PM, Harald Jörg <haj@posteo.de> wrote:
>
> Dan Book <grinnz@gmail.com> writes:
>
>> DBD::MariaDB, DBD::SQLite, and DBD::Pg are used with the unicode
>> option in any modern programs. Thus they expect decoded strings.
>
> As far as DBD::SQLite is concerned, this is only half-true. In the
> current version 1.70 there have been changes how to declare unicode
> handling, but even with DBD_SQLITE_STRING_MODE_UNICODE_STRICT you can
> feed it UTF-8 encoded byte sequences and it "just works" (but maybe
> shouldn't).

Perl has no way of making it *not* work, alas.

>
> You see the downside of this when you have a non-ASCII literal in a
> iso-latin-1 encoded Perl source (e.g. "ä" or "\x{e4}"). For Perl, it is
> the same character as "\N{LATIN SMALL LETTER A WITH DIAERESIS}", but if
> you feed both to the database you get different results.

This should no longer be the case if you avoid DBD_SQLITE_STRING_MODE_PV.

> It seems that the driver still inspects the infamous UTF-8-flag to
> decide whether a literal is encoded or not.

This is not the case, except with DBD_SQLITE_STRING_MODE_PV, which for backward compatibility reasons remains the default.

-FG
Re: DBD::SQLite WAS Re: "use v5.36.0" should imply UTF-8 encoded source [ In reply to ]
Felipe Gasper <felipe@felipegasper.com> writes:

>> [...]
>> You see the downside of this when you have a non-ASCII literal in a
>> iso-latin-1 encoded Perl source (e.g. "ä" or "\x{e4}"). For Perl, it is
>> the same character as "\N{LATIN SMALL LETTER A WITH DIAERESIS}", but if
>> you feed both to the database you get different results.
>
> This should no longer be the case if you avoid DBD_SQLITE_STRING_MODE_PV.
>
>> It seems that the driver still inspects the infamous UTF-8-flag to
>> decide whether a literal is encoded or not.
>
> This is not the case, except with DBD_SQLITE_STRING_MODE_PV, which for
> backward compatibility reasons remains the default.

You are right, in both cases.

I tripped over a glitch in the documentation of DBD::SQLite 1.67_07
(https://github.com/DBD-SQLite/DBD-SQLite/issues/86) and failed to
re-check when 1.70 was released.
--
Sorry for the noise,
haj