On Sun, 06 Feb 2011 11:54:37 -0500, Samuel Adam <a...@certifound.com>  
wrote:

> On Sun, 06 Feb 2011 11:41:03 -0500, Teg <t...@djii.com> wrote:
>
>> Hello Yves,
>>
>> You could alway mime/uu/yenc encode it into text before insert, and do
>> the reverse when you retrieve it. Then the problem goes away.
>
> No, it doesn’t:  Then SQLite *really* has no way of telling the byte
> length of the value,

I take that back:  Those desiring the Rube Goldberg route to data bliss  
may code up mime/uu/yenc encode/decode SQLite extensions, compile as  
dynamic libraries, load on the database connection using appropriate PHP  
calls (does PDO support this? SQLite3 class does), and proceed thenceforth  
as such:

    SELECT length(uudecode(mousetrap("Data"))) FROM "message_revision";

Or, take the easier route:  Bind as a BLOB, and use the constraint I  
suggested earlier to prevent future mistyping of data.

For a quick workaround on the existing database, Mr. Goergen may also try  
this:

    SELECT length(CAST ("Data" AS BLOB)) FROM "message_revision";

Tested:

SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE "" ("");
sqlite> INSERT INTO "" VALUES (CAST (X'61006263' AS TEXT));
sqlite> SELECT typeof("") FROM "";
text
sqlite> SELECT length("") FROM "";
1
sqlite> SELECT length(CAST ("" AS BLOB)) FROM "";
4
sqlite>

Very truly,

Samuel Adam ◊ <http://certifound.com/>
763 Montgomery Road ◊ Hillsborough, NJ  08844-1304 ◊ United States
Legal advice from a non-lawyer: “If you are sued, don’t do what the
Supreme Court of New Jersey, its agents, and its officers did.”
http://www.youtube.com/watch?v=iT2hEwBfU1g


> which SQL core function length() does perfectly well
> for properly-stored BLOBs (and which is what Mr. Goergen actually  
> wanted).
>
> SQLite handles 8-bit BLOBs just fine, at that; there is never any need
> thereby to bend, fold, spindle, or mutilate data with ugly 7-bit
> workarounds.
>
> Very truly,
>
> Samuel Adam ◊ <http://certifound.com/>
> 763 Montgomery Road ◊ Hillsborough, NJ  08844-1304 ◊ United States
> Legal advice from a non-lawyer: “If you are sued, don’t do what the
> Supreme Court of New Jersey, its agents, and its officers did.”
> http://www.youtube.com/watch?v=iT2hEwBfU1g
>
>
>> C
>>
>> Sunday, February 6, 2011, 10:53:05 AM, you wrote:
>>
>> YG> On 06.02.2011 14:36 CE(S)T, Samuel Adam wrote:
>>>>       * You should be using bound parameters on INSERT.  If you are
>>>> not, change
>>>> your code.  This will eliminate a whole list of potential problems.
>>
>> YG> I already do that.
>>
>>>>       * Make sure the binding is done as BLOB and not TEXT.  PDO
>>>> probably has
>>>> its own flags defined for this.  This is the part that tells SQLite
>>>> whether you are inserting TEXT or BLOB.
>>
>> YG> There is a PDO method to execute a prepared statement with an array
>> of
>> YG> values to be used as parameters. There is no way to specify
>> additional
>> YG> information about how to interpret these values in this method. But
>> YG> there is another method to bind each value separately, and it has
>> YG> another argument to pass some data type. I'd need to change the way  
>> I
>> YG> execute my SQL statements to make use of it.
>>
>> YG> I'd expect that SQLite known on its own what data type a column is
>> and
>> YG> respect it. Seems like SQLite is sometimes more type-agnostic than
>> PHP,
>> YG> where I take great care of data types in this special application.
>>
>> YG> For now, I just won't save files to the database with SQLite but
>> instead
>> YG> on disk. I won't get to rewriting the database class anytime soon  
>> but
>> YG> I'll look into it then.
>>
>> YG> I'm wondering why I get all the data back but SQLite can't count its
>> YG> characters... And the image I get back from SQLite looks error-free
>> so
>> YG> it probably didn't make a single mistake handling it as text data.
>>
>>
>>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to