1

Я пытаюсь переместить старый классический ASP-сайт в Azure App Service. Веб-страницы работают нормально, но отображают национальные символы из столбцов varchar в качестве вопросительных знаков.Столбец Varchar от SQL Server отображается как «???» на классической веб-странице ASP, размещенной на Azure

Как воспроизвести:

  • Создание базы данных SQL Server (на Azure или на другой SQL Server) с Cyrillic_General_100_CI_AS collation

  • Создайте таблицу с varchar и nvarchar столбцов:

    create table dbo.Test 
    (
         id int identity (1,1) not null, 
         code varchar(255) null, 
         name nvarchar(255) null 
    ) 
    
  • Вложить несколько тестовых данных:

    insert dbo.Test (code, name) 
    values ('привет-1', N'привет-2') 
    
    insert dbo.Test (code, name) 
    values ('привет-3', N'привет-4') 
    
  • Убедитесь, что данные выбраны штраф в SSMS:

    select * from dbo.Test: 
    
    id code name 
    1 привет-1 привет-2 
    2 привет-3 привет-4 
    
  • Создать веб-страницу, которая отображает данные:

    id code name 
    1 ??????-1 привет-2 
    2 ??????-3 привет-4 
    

Таким образом, nvarchar столбцы отображаются в порядке, но varchar столбцов нет. Используя следующий код на веб-странице Azure не поможет:

Response.CharSet = "windows-1251" 
Response.CodePage = 1251 
Session.CodePage = 1251 

На «обычных» IIS все отображается нормально - может быть, потому, что он имеет установку «кодирования ASP». Кто-нибудь знает, как исправить это на Azure?

Заранее спасибо

+2

Ну, а затем использовать 'nvarchar' для ничего кириллицы и сделать с ней! Кириллическим символам нужна поддержка Unicode, которую может предоставить только тип данных 'nvarchar'. Так что же тогда вопрос? Просто используйте 'nvarchar': ... –

+0

Марк, на« регулярной »IIS одна и та же веб-страница работала отлично в течение многих лет и отлично работает сейчас, даже с varchar. Почему он не может работать на Azure? И преобразование существующих столбцов varchar в nvarchar в существующую (большую!) Базу данных не является вариантом - потому что для этого требуются также массовые изменения существующих веб-страниц (добавление N к каждому вставке и т. Д.). – Leo

ответ

1

Лучшее решение изменить VARCHAR к NVARCHAR как сказал marc_s. Если это нехорошее решение для вас, попробуйте установить Collation как «Cyrillic_General_CI_AS» при создании базы данных Azure SQL. Обратитесь к this article за более подробной информацией.

enter image description here

Вот мой результат: (просто создать MVC контроллер с точки зрения использования рамки Entity)

enter image description here

+0

Hi Jambor. Спасибо, у меня нет проблем с приложениями ASP.NET - они отлично показывают национальные символы. Проблема существует на веб-страницах классического ASP, и только на Azure. На «регулярных» IIS одни и те же классические страницы ASP работают нормально. – Leo

+0

Как я знаю, Azure Web App не поддерживает пакет установки языка. Если вам нужна эта функция, пожалуйста, проголосуйте [эта обратная связь] (https://feedback.azure.com/forums/169385-web-apps-formerly-websites/suggestions/9854277-provide-net-language-packs-on-web -Программы). В настоящее время, боюсь, вам нужно изменить исходный код.Если возможно, вы можете заменить имя столбца следующим образом: «select» N + CAST (o.code AS NVARCHAR (4000)) из dbo.Test o'. Лучшим решением является изменение varchar на nvarchar в SQL Azure. –