23. september 2004 - 10:36Der er
13 kommentarer og 1 løsning
Problemer med skift fra MSSQL til MySQL
Vil lige starte ud med at sige, at jeg er rookie når vi skal snakke database...
Men når jeg skifter mit database på min applikation fra Mssql til mysql virker nogle af mine SQL queries ikke... HVORFOR ??
Nogle af mine sql forespørgelser er CUT/PASTE ind i koden fra MSSQL...
SÅ SPØRGSMÅLET ER - LAVER MSSQL nogle "udtryk" som ikke kan tolkes af MySQL ? f.eks. "inner joins" - "left outer joins" eller ... FROM TABEL A, TABLE B WHERE a.ID = b.ID ...
Hvad skal man passe på med i sine sql forespørgelser så jeg ikke kommer ud for igen, at man ikke bare kan skifte database...
Alle databaser har specifikke funktioner på sig. F.eks hedder getdate() funktionen i MsSQL now() i MySQL. Der er ikke andet at gøre end at tilpasse sætningerne til den nye database.
Ellers skal du helt holde dig på basis niveau af SQL, så virker det i næsten alle databaser, men ofte har man brug for de lidt avanceret funktioner, så det er næsten umuligt, ikke at gøre brug af disse funktioner.
Opbygningen kan også være forskellig. F.eks kræver Access parenteser om alle join.
fsconsult.dk >> Det var bare et eks på hvilke forskelle der kan være mellem databaser. Nu spurgte t_mons jo om hvordan han/hun undgår problemet igen ved et nyt database skift :o)
Du kan altså ikke sikre dig at du bare kan skifte database, medmindre du holder dig helt nede på basis niveau (evt uden at joine) selv om de fleste databaser vil godtage "INNER JOIN" og "LEFT JOIN".
Alle de "avanceret" sql sætninger skal altså tilpasses til den enkelte database type.
Jeg tror også det meste er basis SQL og de fleste steder benytter jeg mig af en where clause med kommaer isteder for joins (ala FROM TABEL A, TABLE B WHERE a.ID = b.ID )
Har kigget og søgt som en gal på nettet efter - hvad man skal være opmærksom på... uden held.. Har I nogle forslag til søge kritererier..
er helt på bar bund..
hvad menes der med "databaser har specifikke funktioner"
fennec> nægter bare at betragte Access som en database, selvom den forstår SQL :-) (det gøre alm. .txt filer også med den rette driver).
t_mons> prøv at komme med eksempler der giver problemer.
De færreste databaser følger SQL standarden slavisk, og afviger specielt på datatyper. now() er et godt eksempel på at MySQL benytter noget der ikke er SQL standard, men jeg mener at MySQL 4.0 også forstår getDate().
fsconsult.dk >> Fuldstændig enig i at Access ikke er en (god) database. Desværre er der nogle kunder hos os der vil bruge den.
t_mons >> Jeg har endnu ikke fundet et site som beskriver forskelle mellem databaserne. Tror ikke et sådan site eksistere, men jeg håber da nogen vil vise at jeg tager fejl. For jeg kunne også godt bruge et sådan sted. Problemet er nok at der er en million små forskelle mellem de mange database typer. Bare her på E har de katagorier til 7 forskellige databaser. Så det ville blive et meget omfattende site hvis er sådan eksistere.
Vi laver ofte site's her som skal gøre på forskellige databaser efter kundens ønske (MySQL, MS-SQl og Access). Det vi gør, er at vi har en fil som vi inkludere på siderne. Her har vi navne på funktionerne og specielle sql-sætninger til at ligge i. Afhængig af hvilken database de så vælger includere vi den rette fil. Der er også ting der ikke kan laves i nogle databaser, som man kan i andre. Der kan man kun programmere sig ud af problemet, hvorfor vi så har specielle løkker i koden afhængig af hvad DataBaseType er sat til.
f.eks. Access: DataBaseType = "Access" SQLDate = "date()" SQLDateTime = "now()" SQLString1 = "select bruger.* from (brugere INNER JOIN .. on ...) where ... "
MS-SQL: DataBaseType = "MS-SQL" SQLDate = "GETDATE()" SQLDateTime = "GETDATE()" SQLString1 = "select bruger.* from brugere INNER JOIN .. on ... where ... "
umiddelbart kan jeg ikke se noget der burde give problemer i MYSQL. har du prøvet at køre dit query i hånden mod MySQL, og hvad giver MySQL så af fejl?
kunne være at dit problem er at du mangler index på MySQL databasen som du har på MSSQL databasen? (ved ikke hvor store datamængder du forsøger at joine)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.