Seite 1 von 1
Database SQLite SELECT upper mit Umlaut
Verfasst: 06.03.2016 15:53
von marcelx
Hallo,
in mein Beispielcode kommt das 'Tä' raus und nicht TÄ
Code: Alles auswählen
UseSQLiteDatabase()
DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
DatabaseQuery(DB, "Select upper('tä')")
While NextDatabaseRow(DB)
Debug "ret: "+GetDatabaseString(DB, 0)
Wend
Debug "E: "+DatabaseError()
FinishDatabaseQuery(DB)
Woran könnte es liegen?
Danke und Gruß
MarcelX
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 07.03.2016 09:09
von mhs
Das liegt an SQLite...
Einige Funktionen können da nur mit 7 bit Latin Zeichen umgehen, deswegen werden z.B. unsere Umlaute nicht unterstützt. Dafür gibt es eine "ICU extension", die du erst laden musst. Alternativ kannst du auch ein "UCase()" in PB machen...
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 07.03.2016 11:57
von marcelx
Danke für deine Antwort.
Mein SELECT beinhalte ein WHERE-Klause in den Stil:
... upper(`"+colName+"`) = "+"'"+UCase(inp)+"' ...
Also eine Suche unabhängige der Klein- Großschreibung.
Ich habe mir ein UCaseX geschrieben:
Code: Alles auswählen
Procedure.s UCaseX(inpStr.s)
ListChr.s = "ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ"
inpStr = UCase(inpStr)
chr.s=""
For i=0 To Len(ListChr)
chr = Mid(ListChr,i,1)
inpStr = ReplaceString(inpStr, chr, LCase(chr))
Next
ProcedureReturn inpStr
EndProcedure
welche für "äa" liefert "äA", und so funktioniert mein select
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 07.03.2016 13:43
von NicTheQuick
Macht man das nicht normalerweise so?
Code: Alles auswählen
SELECT * FROM trees WHERE trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%search_string%'
UTF8_GENERAL_CI steht für 'case insensitive'. Oder geht das bei SQLite wieder nicht?
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 07.03.2016 14:12
von mhs
Nein das geht bei SQLite so nicht... Like ist außer bei Unicode dort grundsätzlich immer Case Insensitiv.
Damit das auch geht, muss die bereits erwähnte ICU Extension dazu geladen werden.
SQLite only understands upper/lower case for ASCII characters by default. The LIKE operator is case sensitive by default for unicode characters that are beyond the ASCII range. For example, the expression 'a' LIKE 'A' is TRUE but 'æ' LIKE 'Æ' is FALSE. The ICU extension to SQLite includes an enhanced version of the LIKE operator that does case folding across all unicode characters.
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 09.03.2016 11:19
von marcelx
Wo finde ich Informationen wie ICU Extension geladen wird ?
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 09.03.2016 11:30
von mhs
Dort solltest du fündig werden:
https://www.sqlite.org/src/artifact?ci= ... README.txt
In PB habe ich sie selber noch nicht verwendet.
Re: Database SQLite SELECT upper mit Umlaut
Verfasst: 09.03.2016 12:07
von marcelx
Danke für den Link.
Mir ist nicht klar wie ich das anstellen solle mit PB!