Martin J. Evans wrote: > Blake Stephens wrote: >> Greetings all, >> >> I'm curious as to what would cause integers to be returned as decimal >> numbers after switching servers. >> >> I just migrated my SQL server from MSSQL 2005 to 2008 and now DBI::ODBC is >> returning all the INTs as decimals! Even boolean columns that used to return >> just 1 or 0, now return 0.00. Just the data moved; the server running the >> scripts hasn't changed since the move, aside from me pointing my DBI >> connections to the new server, literally only updating the >> "Server=oldserver;" to "Server=newserver". Both of my servers are Windows >> Server 64 2008. >> >> When I get back a result with an ID (primary key) it will respond with >> "15.00" instead of "15", for example. This makes using that number in >> hundreds of already written and previously working queries not work at all. >> >> Perl is using: "dbi:ODBC:Driver={SQL Server};" as the connection string to >> talk to the server and PHP is using "Driver={SQL Server};". PHP seems to be >> doing it too. >> >> Any DBI or ODBC experts out there who could shed light on why this is >> happening now on the new server and never before on the old? Maybe a tip or >> configuration change that may fix it? >> >> Here's an example &Dumper() dump of a hashref that's populated by int() >> primary keys as keys and varchar() text as their values. >> >> $VAR1 = { >> '16.00' => 'Testing manual login', >> '11.00' => 'post migration', >> '8.00' => 'inserted variable', >> '9.00' => 'inserted variable', >> '17.00' => 'some text', >> '4.00' => 'my text here yay', >> '14.00' => 'some text', >> '13.00' => 'some text', >> '7.00' => 'testing text', >> '6.00' => 'test', >> '15.00' => 'some text', >> '3.00' => 'my text here yay', >> '1.00' => 'my test', >> '5.00' => 'test', >> '10.00' => 'some text', >> '2.00' => 'test2', >> '18.00' => 'some text', >> '12.00' => 'some text' >> }; >> >> And here's the table that it came from: >> >> CREATE TABLE [dbo].[Tester]( >> [id] [int] IDENTITY(1,1) NOT NULL, >> [clientsemailaddress] [varchar](300) NULL, >> [mytext] [varchar](300) NULL, >> [posteddate] [datetime] NOT NULL, >> CONSTRAINT [PK_Tester] PRIMARY KEY CLUSTERED >> ( >> [id] ASC >> ) >> WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = >> OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] >> ) ON [PRIMARY] >> >> >> Thanks. >> -Blake >> >> -Blake Stephens - >> Web Applications Developer, Webmaster >> University of Central Florida >> Library Systems & Technology >> http://library.ucf.edu/ >> > > I don't think there is anything in DBD::ODBC which would cause this and > since you are using the same DBD::ODBC in both cases this would also > indicate this. It is however possible that the second server is > returning a different type for the columns. You could test this by > issuing the query and then examining the TYPE and PRECISION attributes > for each column (see > http://search.cpan.org/~timb/DBI-1.613/DBI.pm#Statement_Handle_Attributes). > > Martin
I've had another thought. If you are using a different DSN for each (which you probably are) there is a rather nasty international/language setting in the ODBC Driver setup that I think forces all integers to money types - turn it off, it is horribly flawed and breaks lots of stuff. I think it is called something like "use regional settings when outputting...". Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com