Неправильная кодировка символов из приложения SQL Server в Rails 3 в Linux через freetds - PullRequest
1 голос
/ 11 сентября 2011

Я разрабатываю приложение на MacOS в Ruby 3.0 с использованием SQL Server 2008 R2 в качестве базы данных.Я подключаюсь через freetds и tiny_tds.

Когда я сохраняю данные через скаффолд с использованием расширенных символов, например, - все работает нормально, буквы выглядят правильно при просмотре данных в SQL Server Management Studio и когда япрочитайте данные обратно в интерфейс Rails, и он отобразится правильно.

Когда я развертываю приложение на машине Linux, которая также использует freetds и tiny_tds для подключения к той же базе данных, я получаю искаженные символы в интерфейсе.Когда я сохраняю данные через сервер Linux, символы правильно отображаются в браузере, но при просмотре данных в SSMS символы кодируются и не читаются (я ввожу ÞÞðð) и получаем это в SSMS:

ÞÞðð

Это я получаю в браузере с сервера Linux для Suðurnes, записанного в БД с Mac:

Su�urnes

Я установил эту строку в database.yml:

encoding: utf8

Это ничего не изменило.Я также установил эту строку в файле freetds.conf:

client charset = UTF-8

База данных SQL имеет Icelandic_CI_AS в качестве CODEPAGE, но я уверен, что это не ошибка, потому что она работает правильно с компьютера Mac.

Я проверил это как на Passenger apache, так и на WEBrick, поэтому я не думаю, что это вызвано apache.

Так есть ли какие-либо настройки в Linux, на которые мне нужно перейтиПозвольте ему вести себя так же, как Mac?

По существу, между веб-сервером и базой данных есть что-то, что преобразует значения туда и обратно.

РЕДАКТИРОВАТЬ: * Когда я использую инструмент командной строки tsql для запроса базы данных, я получаю правильную кодировку текстов.Итак, насколько я понимаю, это путь: Веб-клиент> Apache> Приложение Rails> Tiny_tds> Freetds> SQL Server Итак, проблема должна быть на сайте Apache или в самом приложении rails.На самом деле не имеет значения, использую ли я Apache или WebBrick, поэтому я не совсем понимаю, в чем проблема.Есть идеи? *

С уважением, Иоганн

1 Ответ

1 голос
/ 11 сентября 2011

Проблема заключалась в том, что в файле freetds.conf была указана кодировка, которая вызывала проблему. Я также должен был убедиться, что в файле database.yml не задана кодировка.

...