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 -- Martin J. Evans Easysoft Limited http://www.easysoft.com