Database SQLite SELECT upper mit Umlaut

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Database SQLite SELECT upper mit Umlaut

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Database SQLite SELECT upper mit Umlaut

Beitrag 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...
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Database SQLite SELECT upper mit Umlaut

Beitrag 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
Zuletzt geändert von marcelx am 09.03.2016 11:13, insgesamt 1-mal geändert.
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Database SQLite SELECT upper mit Umlaut

Beitrag 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?
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Database SQLite SELECT upper mit Umlaut

Beitrag 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.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Database SQLite SELECT upper mit Umlaut

Beitrag von marcelx »

Wo finde ich Informationen wie ICU Extension geladen wird ?
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Database SQLite SELECT upper mit Umlaut

Beitrag 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.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Database SQLite SELECT upper mit Umlaut

Beitrag von marcelx »

Danke für den Link.
Mir ist nicht klar wie ich das anstellen solle mit PB!
Win-10, PB 5.31 (Windows - x86)
Antworten