There rings a bell with your problem description. It's a while ago, but I 
remember now that I'm having similar problems with one of my apps and 
non-ASCII characters.
Since you are using the MATCH operator I assume you are also using the FTS3 
extension. I just found this piece of information on the documentation page 
for FTS:

*All uppercase characters within the ASCII range (Unicode codepoints less 
> than 128), are transformed to their lowercase equivalents as part of the 
> tokenization process. Thus, full-text queries are case-insensitive when 
> using the simple tokenizer. *
>

(source: http://sqlite.org/fts3.html#tokenizer)

That may explain why French accented lower-case letters are not correctly 
matched against their upper case equivalents, since they are effectively 
ignored by the default tokenizer. The same page mentions further down that 
the "unicode61" tokenizer implementation solves that problem correctly, 
however it looks like it is only available for FTS4, which in turn is only 
available since Android ICS (see 
http://stackoverflow.com/questions/6339022/sqlite3-fts4-match-and-android).

A dirty workaround would be to create an "OR"ed match query for both upper 
case and lower case versions of accented letters:

SELECT * FROM MyTable WHERE content MATCH 'Écuter OR écuter'

This however can get out of hand the more accented letters are contained in 
your search query. But if the data in your database is written according to 
standard writing rules (all lower case letters except for titles and words 
at the beginning of a sentence) you could focus just on the first letter of 
the search term for creating those "OR"ed match queries.



On Saturday, April 18, 2015 at 4:03:28 AM UTC-7, Doug Gordon wrote:
>
> Similar questions have been asked, but many are old and it's not clear 
> to me exactly what the resolution is. I have a list filter with a local 
> db query that is matching columns against user input (uses MATCH, but 
> that is probably not significant). Both the contents of the columns and 
> the user input can be mixed case, but the match should be 
> case-insensitive. This has been working (for years!) for most 
> situations, but it was recently pointed out to me by a user (in France) 
> that if he inputs a lowercase accented character, e.g. é, it will not 
> match a database entry containing the uppercase equivalent, e.g. É. 
>
> My understanding is that Android SQLite does not support this 
> automatically as it does for ASCII characters, but is there a solution 
> within Android? I have no control over what is in the database (it comes 
> from an outside source) or what the user inputs. 
>
> Doug Gordon 
> GHCS Software 
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to