none
Сообщения от Database Mail по-русски RRS feed

  • Общие обсуждения

  • Здравствуйте все!

    Пытаюсь послать сообщение, у которого в теле письма есть русский текст. В результате получаю сообщение, но вместо текста по-русски вижу знаки вопроса. Подскажите пожалуйста, что надо лечить?

    20 марта 2007 г. 16:01

Все ответы

  • Приведите пример вызова процедуры и результат.

    20 марта 2007 г. 18:19
  • Следующий код показывает как я совершаю вызов:

    exec sp_send_dbmail @profile_name = 'Test',

                                    @recipients = 'atikhanovskiy@kandasoft.com',

                                    @subject = 'Test Russian',

                                   @body = 'What the hell is going with русский текст?'

    после выполнения в почтовом ящике получаю строку следующего вида:

    What the hell is going with ??????? ??????

    Для справки:

    1. SQL Server 2005 SP2

    2. Database collation Latin1_General_CS_AS

    Спасибо всем.

    21 марта 2007 г. 14:15
  • А если так:

    DECLARE @body nvarchar(max)

    select @body = 'What the hell is going with русский текст?' collate Cyrillic_General_CI_AS

    SELECT @body

    exec sp_send_dbmail @profile_name = 'Test',

    @recipients = 'atikhanovskiy@kandasoft.com',

    @subject = 'Test Russian',

    @body = @body

    21 марта 2007 г. 19:41
  • А что за почтовый клиент? Кто выступает в качестве smpt-сервера?

    select * from sysmail_mailitems показывает по-русски?

     

    Щас проверил ваш пример, аналогично SQL 2005 SP 2 но русский collation, почту принимает exchange 2003 и читаем её outlook - всё ок.

    sysmail_mailitems покажет, что записывается в базу. Если там по-русски, то предлагаю посмотреть дальше, в сторону smpt и читалки почты.

    22 марта 2007 г. 7:20
  • Что-то не выходит каменный цветок.

    Присланный Alexander Gladchenko код так же не работает. Путем экспериментов я выяснил, что в моих условиях (имеем collation Latin1_General_CS_AS у базы данных, но хотим смиксовать русский и английский текст) возможен только один правильный вариант:

    declare @body nvarchar(max)

    select @body = N'What the hell is going with русский текст?'

    exec sp_send_dbmail @profile_name = 'Test',

    @recipients = 'atikhanovskiy@kandasoft.com',

    @subject = 'Test Russian',

    @body = @body

    Т.е. мы unicode переменной присваиваем результат unicode выражения.

    Вариант присвоения 

    select @body = 'What the hell is going with русский текст?' collate Cyrillic_General_CI_AS не срабатывает, хоть умри. Я не понимаю почему. Кстати, не могли бы объяснить?

    Вариант

    select @body = convert(nvarchar(max), ('What the hell is going with русский текст?' collate Cyrillic_General_CI_AS))  также не прокатывает.

    Интересно получается:

    1. Имеем например переменную типа varchar(max)

    2. Судя по MSDN'у она принимает значение collation'а базы данных

    3. Судя по предыдущим примерам, если мы присваиваем этой переменной значение с другим collation'ом, то этот collation потеряется при присвоении.

    А нельзя ли при объявлении строковых переменных в SQL'е заодно и указывать и collation этой переменной? Понятно, что можно обойтись переменной nvarchar(), но использование переменной такого типа в данном случае не продиктовано ничем, кроме как необходимостью обойти ограничения накладываемые SQL'ем (да и граблей прибавляет).

     

    24 марта 2007 г. 11:29
  • Интересные вопросы, я тоже склонен их поддержать... Постараюсь адресовать их команде разработчиков.

    Как то не очевидно всё устроено в части локализованных сообщений, а если учесть все особенности автоматического выбора кодировок почтовыми клиентами, становится совсем грустно... ИМХО, очень не хватает явного указания кодировки писем через параметр процедуры.

    24 марта 2007 г. 18:18
  • послал запрос на объяснение поведения. Ждем ответа
    26 марта 2007 г. 15:49
  • Такое впечатление, что обнаружились новые ворота...
    3 апреля 2007 г. 11:57