Code: FreeTDS Notes
Mac OS X, Perl, and Microsoft SQL Server
These are my notes on installing and configuring FreeTDS on Mac OS X to work with Perl and Microsoft SQL Server 2000
It's here for my own purposes, and you find it useful, well, then we both win.
(Note that some lines are long and may wrap, if you are using the command line, make sure they don't wrap...)
Our goal was to use Perl running on Mac OS X to connect to a Microsoft SQL Server running on Windows...
Version details:
- Mac OS X 10.3.2
- FreeTDS 0.62.3
- Perl 5.8.1-RC3
- DBD::Sybase 1.02
- Microsoft SQL Server 2000
Installing FreeTDS on Mac OS X
After you untar the thing, run configure with the following options:
./configure --disable-odbc --disable-libiconv
You then need to edit the libtool file. Somewhere around line 205 you should see:
archive_cmds="\$CC \$(if test .\$module = .yes; then echo -bundle; else echo -dynamiclib; fi) \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$linkopts -install_name \$rpath/\$soname \$verstring"
Remove this bit from the line: \$deplibs
Then do the regular stuff:
make clean make sudo make install
I'm not sure if you need the 'make clean' but I know I did because this took a few attempts... I'd do it anyway, as I don't think it will do any harm.
Configuring FreeTDS
Once that is all done, you need to configure the file at /usr/local/etc/freetds.conf
I just edited the entry after: "A typical Microsoft SQL Server 2000 configuration"
[SQLServer2000]
host = sql.example.com
port = 1433
tds version = 8.0
I set the servername to "SQLServer2000" and it's found at "sql.example.com" (I didn't change the port or tds version.)
Using DBD::Sybase
If using bash (which is the default with Panther I believe) you might need to set the SYBASE environment variable:
set SYBASE=/usr/local export SYBASE
should do it...
The DBD::Sybase install was pretty standard. (I did it outside of cpan, though this may be due to my multiple attempts at installing FreeTDS.)
Then in a perl script I've got:
#!/usr/bin/perl
use DBI;
use DBD::Sybase;
BEGIN
{
$ENV{SYBASE} = "/usr/local";
}
$db = DBI->connect(
"DBI:Sybase:server=SQLServer2000;database=MyTestDatabase",
'username',
'password'
);
...
After that it should be the normal DBI stuff...
The bit with server=SQLServer2000 specifies the server, matching what we have in the freetds.conf file. We specified the database with the database=MyTestDatabase bit, then just add in the username and password, and shebang, it should work...
Links:
Charsets
Ah, I was having problems with charsets and grabbing data from a Microsoft SQL Server, so added one more line to the server's config:
[SQLServer2000]
host = sql.example.com
port = 1433
tds version = 8.0
client charset = UTF-8
Which seems like it'll do the right thing now, which is convert WINDOWS-1252 to UTF-8
Links: