Avatar billede t_mons Nybegynder
23. september 2004 - 10:36 Der 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...

håber i forstår mit spørgsmål...
Avatar billede fsconsult.dk Nybegynder
23. september 2004 - 10:52 #1
Det kommer meget an på hvilken version af MySQL du benytter.

De ældre versioner af MySQL understøtter bl.a. ikke subselects
Avatar billede fennec Nybegynder
23. september 2004 - 10:57 #2
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.
Avatar billede fsconsult.dk Nybegynder
23. september 2004 - 11:06 #3
fennec> hmm..  hvad har Acccess med databaser at gøre?  ;-)
Avatar billede fennec Nybegynder
23. september 2004 - 11:25 #4
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.
Avatar billede t_mons Nybegynder
23. september 2004 - 11:31 #5
Jeg benytter version 4.0 et eller andet... :o)

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"

Jeg er sku lidt forvirret  -  he he he
Avatar billede fsconsult.dk Nybegynder
23. september 2004 - 11:37 #6
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().
Avatar billede t_mons Nybegynder
23. september 2004 - 11:46 #7
HEY  takker lige for at i giver jer tid...


I min java klasse ser det således ud

buffer.append("SELECT ");
buffer.append("TR3_TEMPLATERECORD.TR3_TEMPLATERECORD_ID, ");      // int
buffer.append("TR3_TEMPLATERECORD.TR3_PROJECT, ");                // int
buffer.append("TR3_TEMPLATERECORD.TR3_TASK, ");                    // int
buffer.append("TR3_TEMPLATERECORD.TR3_ACTIVITY, ");                // int
buffer.append("TR3_TEMPLATERECORD.TR3_ARTICLE, ");                // int
buffer.append("TR3_TEMPLATE_TEMPLATERECORD.SORTORDER, ");                  // int
buffer.append("TR3_TEMPLATERECORD.LASTMODIFIEDBY, ");              // String
buffer.append("TR3_TEMPLATERECORD.LASTMODIFICATIONDATE, ");        // String
buffer.append("TR3_PROJECT.PROJECTNUMBER, TR3_TASK.TASKNUMBER, TR3_ACTIVITY.ACTIVITYNUMBER ");// String
buffer.append(", TR3_PROJECT.DESCRIPTION ");
buffer.append(", TR3_PROJECT.STARTDATE ");
buffer.append(", TR3_PROJECT.ENDDATE ");
buffer.append(", TR3_PROJECT.OPENCLOSED ");
buffer.append(", TR3_PROJECT.TYPE ");
buffer.append(", TR3_PROJECT.LASTMODIFIEDBY ");
buffer.append(", TR3_PROJECT.LASTMODIFICATIONDATE ");
buffer.append(", TR3_PROJECT.INVOICEABLE_STATUS ");
buffer.append(", TR3_PROJECT.PSTATUS_MODDATE ");
buffer.append(", TR3_PROJECT.PSTATUS_MODBY ");
buffer.append(", TR3_PROJECT.SVALUE_1 ");
buffer.append(", TR3_PROJECT.SVALUE_2 ");
buffer.append(", TR3_PROJECT.SVALUE_3 ");
buffer.append(", TR3_PROJECT.SVALUE_4 ");
buffer.append(", TR3_PROJECT.YEAR_AHEAD ");
buffer.append("FROM ");
buffer.append("  TR3_TEMPLATERECORD ");
buffer.append(", TR3_TEMPLATE_TEMPLATERECORD ");
buffer.append(", TR3_PROJECT, TR3_TASK, TR3_ACTIVITY");
buffer.append(", TR3_ARTICLE ");
buffer.append("WHERE ");
buffer.append(" TR3_TEMPLATERECORD.TR3_PROJECT=TR3_PROJECT.TR3_PROJECT_ID");
buffer.append(" AND TR3_TEMPLATERECORD.TR3_TASK=TR3_TASK.TR3_TASK_ID");
buffer.append(" AND TR3_TEMPLATERECORD.TR3_ACTIVITY=TR3_ACTIVITY.TR3_ACTIVITY_ID");
buffer.append(" AND TR3_ARTICLE.TR3_ARTICLE_ID = 1");
buffer.append(" AND TR3_TEMPLATE_TEMPLATERECORD.TR3_TEMPLATERECORD = TR3_TEMPLATERECORD.TR3_TEMPLATERECORD_ID ");
buffer.append(" AND TR3_TEMPLATE_TEMPLATERECORD.TR3_TEMPLATE = 12345);
buffer.append(" ORDER BY ");
buffer.append(" TR3_TEMPLATE_TEMPLATERECORD.SORTORDER, TR3_PROJECT.PROJECTNUMBER, TR3_TASK.TASKNUMBER, TR3_ACTIVITY.ACTIVITYNUMBER");


Når denne bliver fyret af mod databasen sker der ikke meget, og som jeg kan se er det helt basis SQL... (tror jeg)

Den virker ned mod MsSQL og Oracle - men ikke mod MySQL
Avatar billede fennec Nybegynder
23. september 2004 - 12:03 #8
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 ... "
Avatar billede fsconsult.dk Nybegynder
23. september 2004 - 12:05 #9
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?
Avatar billede t_mons Nybegynder
23. september 2004 - 12:38 #10
ja det er kørt i hånden, MySQL timer ud....  (egentlig en vigtig detajle, som jeg glemte at skrive før)

jamen jeg kigger videre på nettet....

Takker for jeres interesse, kan i ikke smide nogle svar, så deler jeg pointene ud
Avatar billede fennec Nybegynder
23. september 2004 - 12:43 #11
.o) <-- One Eyed Jack
Avatar billede fsconsult.dk Nybegynder
23. september 2004 - 12:51 #12
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)
Avatar billede fennec Nybegynder
23. september 2004 - 12:51 #13
Jeg skulle vel ikke have alle point :o)

Oprette lige et ? til dig fsconsult.dk.
Avatar billede fennec Nybegynder
23. september 2004 - 12:52 #14
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester