[MySQL] Output onjuist vanwege decimaal karakter

Pagina: 1
Acties:
  • 643 views sinds 30-01-2008
  • Reageer

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Ik ben net begonnen met het gebruik van MySQL. Opzich ging dat allemaal zonder problemen en vrij makkelijk. Ik heb MySQL Server 4.1.13 geinstalleerd en MySQL Query Browser 1.1.13 en MySQL Administrator 1.1.0 rc.

Heb zelfs de tool MS SQL to MySQL 2.5 gebruikt om tabellen en data uit een MS SQL 2000 database over te zetten naar MySQL. dit werkt ook allemaal prima.

Echter nu het probleem, via een ASP webapplicatie toon ik uit de database decimale getallen. De instellingen van de server zijn dat een , (komma) wordt gebruikt als decimaal karakter, echter MySQL gebruikt een . (punt) als decimaal karakter.
Waardoor data uit de database, bijv. 98,7 in de webapplicatie verschijnt als 98

Het probleem is hier op GoT zoals ik via de search kon vinden 1 keer eerder voorgekomen, echter zonder een echte goede oplossing: [rml][ MySQL,MyODBC] Decimalen worden geparsed als integers[/rml]

Ik wil namelijk absoluut niet de regionale instellingen van de server wijzigen. Ik wil dus in MySQL ergens configureren dat ik een komma als decimaal karakter wil gebruiken i.p.v. een punt.
Via MySQL Administrator al naar zo'n optie gezocht maar niet gevonden... :|

Weet iemand hoe ik dit kan oplossen of waar dit in MySQL is in te stellen? :?

Alvast _/-\o_ _/-\o_

Edit: Microsoft SQL Server 2000 pakt trouwens gewoon netjet de regional settings van de server.

[ Voor 5% gewijzigd door Urk op 28-07-2005 23:47 . Reden: toevoeging ]


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Door te zoeken op 'mysql punt komma' kwam ik nog een wat ouder topic tegen die over hetzelfde gaat. Een oplossing wordt niet genoemd, maar wel enkele punten waarnaar je kunt kijken.

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Thanks!

Maar precies, geen oplossing! 8)7
Ze zeggen in dat topic wel om het in je applicatie te bewerken, dat dacht ik dus ook, maar dat is niet mogelijk, als ik de data puur direct uit MySQL haal naar ASP toont hij het gelijk al zonder decimalen. Ik kan er dus via ASP ook niets mee doen.. |:(

Hier moeten toch veel meer mensen tegenaan zijn gelopen? Waarom is hier dan zo weinig info over? Ook via Google vindt ik tot nu toe nog weinig nuttigs. :'(

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Nog een topic hierover: http://www.php4you.nl/forum/topic/3366/2
Maar nog geen oplossing binnen MySQL... Die moet er toch zijn? 8)7

  • Pepper
  • Registratie: Februari 2002
  • Laatst online: 19-06-2025

Pepper

The one and only!!

Kan je niet gewoon alle waardes in je db omzetten van komma naar punt?
of is dat geen optie?
Anders moet je toch in je ASP een replace uitvoeren van komma naar punt:
ASP:
1
replace(objRS("DBVELD"),",",".")

Want als je naar de DB schrijft moet dat sowieso toch een punt zijn.

dus...


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Een vieze oplossing is natuurlijk om het ding in mysql al als een tekst-veld te behandelen en de . door een , te vervangen. Maar ik weet niet hoe fijn je applicatie dat vindt, daarna kan je het overigens wel vast weer naar een echte float casten in je asp.

Mysql deel wordt dan zoiets:
SQL:
1
select replace(jefloat, '.', ',') as eenalias


En omgekeerd moet je idd in mysql er weer een punt neerzetten, dat kan evt ook pas in je query.

[ Voor 32% gewijzigd door ACM op 29-07-2005 10:02 ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 01-05 19:54

Bosmonster

*zucht*

Je kunt om een of andere reden in MySQL geen locale instellen voor dit soort zaken (of ik zie het over het hoofd).

Misschien kun je het in MS SQL (als dat kan, niet zoveel ervaring mee) wel instellen op engels tijdelijk voor de export? Zodat je export al met punten werkt dus :)

[ Voor 8% gewijzigd door Bosmonster op 29-07-2005 10:44 ]


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
ACM schreef op vrijdag 29 juli 2005 @ 09:59:
Een vieze oplossing is natuurlijk om het ding in mysql al als een tekst-veld te behandelen en de . door een , te vervangen. Maar ik weet niet hoe fijn je applicatie dat vindt, daarna kan je het overigens wel vast weer naar een echte float casten in je asp.

Mysql deel wordt dan zoiets:
SQL:
1
select replace(jefloat, '.', ',') as eenalias


En omgekeerd moet je idd in mysql er weer een punt neerzetten, dat kan evt ook pas in je query.
Thanks ACM! _/-\o_
Dit is echt het eerste wat werkt!

Nog wel even een vraag daarover? Ontvangt ASP het dan wel als een String?

Ik heb me gister en vannacht helemaal rot gezocht naar oplossingen, maar kreeg het gewoon niet juist uit MySQL. Toch blijft dit altijd een probleem, net zoals met datums.
Het is toch belachelijk dat je dit niet in MySQL kan instellen? Wat vinden jullie daarvan?
MySQL werkt dus decimaal alleen met punten, op mijn server zijn decimalen met een komma...

In MS SQL Server kun je dit wel instellen, om hierbij terug te komen op de vraag van Bosmonster:

Dat gebruikt ik trouwens regelmatig, in MS SQL kun je bijv het datumformaat in je query aangeven, d.m.v: SET dateformat DMY

Weet trouwens niet of dat ook voor het decimale karakter geld, maar in ieder geval kijkt MS SQL wel goed naar de Regional settings van de server.

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Damn, het werkt helaas niet helemaal correct ACM, de waarden die uit de query komen worden in de query ook gesorteerd, en nu gaat dat niet meer goed, dit is de MySQL query:

code:
1
SELECT field1, replace(field3, '.', ',') as field3 FROM sorttemp ORDER BY field3 DESC

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Kwalificeer het hele veld (sorttemp.field3) in je order by of geef een andere alias aan je replacement-resultaat?

Maar MySQL behandelt het resultaat impliciet als string en ASP zal later ook wel in het resultaatset meekrijgen dat het om een string gaat.

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
ACM schreef op vrijdag 29 juli 2005 @ 17:07:
Kwalificeer het hele veld (sorttemp.field3) in je order by of geef een andere alias aan je replacement-resultaat?

Maar MySQL behandelt het resultaat impliciet als string en ASP zal later ook wel in het resultaatset meekrijgen dat het om een string gaat.
Thanks ACM! _/-\o_ _/-\o_
Het probleem is al opgelost met:
code:
1
SELECT field1, replace(field3, '.', ',') as field3 FROM sorttemp ORDER BY sorttemp.field3 DESC

Binnen ASP kan ik er wel gelijk rekenkundige functies mee uitvoeren, als ik het veld direct door de functie Formatnumer() haal gaat het gelijk prima zonder fouten! :)
Pagina: 1