webForumDet fria alternativet

Färdig metod för att escapa viss tecken

Java

9 svar · 405 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Hej!

Rätt så enkel fråga:

Stötte på problem med att söka efter åäö i databasen (MySql). Kör därför nu med frågor i stil med "SELECT * FROM xxx WHERE word LIKE '%xxx%'.

Med Java så kör jag egentligen med PreparedStatement, så '%xxx%' byts ut mot ? och senare kör jag:

stmt.setString(1, "%" + ordet + "%");

Detta ställer till om jag söker efter ord som innehåller t ex "%". Finns det färdiga metoder för att "escapa" dessa tecken?
Vilka tecken bör man isf "escapa"?

Med escapa menar jag t ex \% om "5" finns i strängen.

Medlem sedan sep. 2001961 inlägg
#2

Det där är, tyvärr, beroende på databasen. Vissa implementationer escapar automatiskt när man använder %, _, \ eller något annat specialtecken i en sträng. Det måste du nog slå upp i manualen till det lib du använder dig av.

I C hade jag använt funktionen real_escape_string() men jag vet inte hur det ser ut i den implementation du använder (MySQL Connector/J??).

Dock har jag för mig att det i specen för JDBC sägs att setString(int, String) ska göra escape på de specialtecken som databasen hanterar. Det är därför man använder sig av prepared statements och inte vanliga statements om man bara kan.

Medlem sedan maj 20012 237 inlägg
#3

Äh!

Jag kan lägga in ordet "sääääädfägädfg" i databasen men ordet "äää" går inte.

Kör med PreparedStatement

Medlem sedan maj 20012 237 inlägg
#4

Jag blir helt galen på detta åäö-problem. Jag får det inte att fungera.

Hur ska jag konffa MySql-tables?

Vilken character set skall jag köra med MySql?
Jag kan både sätta default character set med programmet
MySQLInstanceConfig.exe

I Java-koden har jag

"jdbc:mysql://"+ host + ":" + port + "/" + database + "?useUnicode=true&characterEncoding=iso-8859-1";

Medlem sedan sep. 2001961 inlägg
#5

Ah...

iso-8859-1 är ju en pyttemjuk-uppsättning har jag för mig.

Testa vanlig jävla UTF-8 istället.

Medlem sedan juni 20008 205 inlägg
#6

Hurru Lime, ISO-8859-1 är som namnet antyder en ISO-standard som precis lika gärna kan användas på Linux. Så det *borde* inte vara problemet, men om databasservern kör med någon annan teckenuppsättning (typ UTF-8) kan det knasa.

Medlem sedan maj 20012 237 inlägg
#7

Jag "löste det". Tog bort ovanstående kod, dvs "?useUnicode=true&characterEncoding=iso-8859-1"

och då fungerar det.

Medlem sedan sep. 2001961 inlägg
#8

spango skrev:

Hurru Lime, ISO-8859-1 är som namnet antyder en ISO-standard som precis lika gärna kan användas på Linux. Så det *borde* inte vara problemet, men om databasservern kör med någon annan teckenuppsättning (typ UTF-8) kan det knasa.

Jag sa ju "tror jag". Givetvis är den en standard. Frågan är bara: Har du någonsin sett det användas på något annat system än Windows? Jag har inte gjort det...

Medlem sedan juni 20008 205 inlägg
#9

Lime skrev:

Frågan är bara: Har du någonsin sett det användas på något annat system än Windows? Jag har inte gjort det...

I princip alla svensklokaliserade Linuxsystem jag använt har kört med det, så svaret är definitivt "ja" :)

Medlem sedan sep. 2001961 inlägg
#10

Ah... det förklarar saken... använder bara riktig Unix... ;-)

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)