I tested your script on my system (actually I rewrote portions of it,
as shown below), and when the output was sent to bash standard output all
extended-ascii characters where output as a simple dash ("-"). This
apparently is either a limitation of bash or cygwin.

Then I sent the output to a file called "out", and I was able to see
the extended-ascii characters.

   od -c out

=> 0001500   h   a   r   a   c   t   e   r   :      \t 226  \n   C   h   a

shows char(150) as 226, which is octal for 150, so that's right.

Gvim shows the accented-u character properly once I set my encoding
for extended-ascii (8-bit):

   :set enc=cp437

The output of the test script as viewed in gvim (cp437 encoding):

Selecting the ASCII character for char code 97 [select char(97)]
======================================================================
Character: 	a
Char Code: 	97
result array: [["a"]]

Selecting the numeric code for char(97) [select ascii(char(97))]
======================================================================
Char Code: 	97
Character: 	a


Selecting the ASCII character for char code 150 [select char(150)]
======================================================================
Character: 	?
Char Code: 	150
result array: [["\226"]]

Selecting the numeric code for char(150) [select ascii(char(150))]
======================================================================
Char Code: 	150
Character: 	?





# test script =======================================================
#!/usr/bin/ruby

require 'odbc'

DNS='test'
USR='odbcuser'
PWD='super_secret_password'

connection=ODBC.connect(DNS,USR,PWD)

a = [97,150]

File.open('out', 'wb') do |wbf|
   a.each { |c|
	wbf.puts
	sql1 = "select char(#{c})"
	wbf.puts "Selecting the ASCII character for char code #{c} [#{sql1}]"
	wbf.puts "=" * 70
	results1 = connection.run(sql1)
	results_array1 = results1.fetch_all
	wbf.puts "Character: \t" + results_array1[0][0]
	wbf.print "Char Code: \t"
	wbf.puts results_array1[0][0][0].to_i
	wbf.puts "result array: #{results_array1.inspect}"
	wbf.puts

	results1.drop

	sql2 = "select ascii(char(#{c}))"
	wbf.puts "Selecting the numeric code for char(#{c}) [#{sql2}]"
	wbf.puts "=" * 70
	results2 = connection.run(sql2)
	results_array2 = results2.fetch_all
	wbf.print "Char Code: \t"
	wbf.print results_array2[0][0]
	wbf.puts
	wbf.puts "Character: \t" + results_array2[0][0].chr
	wbf.puts

	results2.drop
   }
   wbf.puts "\226\227" #little test
end

connection.disconnect


------------------------------------------------------------------------------
I didn't get any warnings when compiling ruby-odbc, but I was using gcc 3.4.4.
I also ran the ruby-odbc tests and they were all fine.

So, in conclusion, at least on cygwin/win xp pro sp2, ruby-odbc seems to
work swell.
I recommend sending your output to a file and doing something similar to
what I've done to see exactly what's being sent back from odbc instead
of relying on a (possibly lying) terminal. It would also have been helpful to
know which database [and version] you used.

-lv



Ben wrote:

> Hi,
> 
> Some strange behind-the-scenes character conversion appears to be
> occuring when fetching ASCII code 150 using ruby-odbc. This is
> exempilfied by the script below. It *should* return identical data for
> both selects. However, it does not. When char(150) is selected, the
> ASCII character code 63 is returned. Not good. :-(
> 
> Server information:
> Linux version 2.6.12-10-686-smp (buildd@terranova) (gcc version 3.4.5
> 20050809 (prerelease) (Ubuntu 3.4.4-6ubuntu8)) #1 SMP Fri Nov 18
> 12:27:41 UTC 2005
> ruby 1.8.3 (2005-06-23) [i486-linux]
> 
> 
> What do y'all think?
> 
> Thanks,
> Ben
> 
> === script ===
> require 'odbc'
> 
> connection=ODBC.connect('dsn','username','password')
> 
> sql1 = 'select char(150)'
> puts "Selecting the ASCII character for char code 150 [#{sql1}]"
> puts "=" * 70
> results1 = connection.run(sql1)
> results_array1 = results1.fetch_all
> puts "Character: \t" + results_array1[0][0]
> print "Char Code: \t"
> print results_array1[0][0][0].to_i
> puts
> 
> puts
> 
> sql2 = 'select ascii(char(150))'
> puts "Selecting the numeric code for char(150) [#{sql2}]"
> puts "=" * 70
> results2 = connection.run(sql2)
> results_array2 = results2.fetch_all
> print "Char Code: \t"
> print results_array2[0][0]
> puts
> puts "Character: \t" + results_array2[0][0].chr
> 
> 
> === Output ===
> Selecting the ASCII character for char code 150 [select char(150)]
> ======================================================================
> Character:      ?      <---- should be blank like the below
> Char Code:      63   <---- should be 150
> 
> Selecting the numeric code for char(150) [select ascii(char(150))]
> ======================================================================
> Char Code:      150
> Character:       (blank)  <---- because the shell window won't display
> the em dash