2010-11-16 2 views
2

Мы разработали сайт, который должен отображать текст на английском, польском, словацком и чешском языках. Однако, когда текст вводится в базу данных, любые буквы с акцентом изменяются на английские буквы.Многоязыковая поддержка

После поиска на форумах я обнаружил, что можно поставить «N» перед строкой, содержащей символы с акцентом. Например:

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

Однако сайт уже полностью разработана таким образом, на данном этапе, проходящие через все INSERT и UPDATE запросов в месте будет очень долгий и трудоемкий процесс.

Мне было интересно, есть ли какой-нибудь другой, гораздо более быстрый способ сделать то, что я пытаюсь сделать?

База данных - это MSSQL, а вставляемые столбцы уже nvarchar (n).

+1

Как вы получаете доступ к базе данных? (Какой тип клиентов?) – Stu

+1

Каковы определения столбцов? Используете ли вы типы NVARCHAR вместо VARCHAR? – Oded

+0

@Stu Извините, я точно не знаю, что вы просите. Сайт - это сайт .NET, если это то, что вы имеете в виду? – Leah

ответ

1

Существует не быстрое решение.

Обновления и вставки неправильные и их необходимо исправить.

Если они были параметризованными запросами, вы могли бы просто убедиться, что они используют тип базы данных NVarChar, и у вас не было бы проблем.

Поскольку они являются динамическими строками, вам необходимо убедиться, что вы добавили спецификатор unicode (N) перед каждым текстовым полем, которое вы вставляете/обновляете.

+0

Большое спасибо за помощь. Я попытался изменить один из моих встроенных операторов SQL на хранимую процедуру с параметрами, и я могу подтвердить, что использование параметров сохраняет акценты. Похоже, у меня утомительная работа впереди. – Leah

0

Тема стартер писал:

«Текст на английском, польском, словацком и чешском Однако, когда текст вводится в базу данных, любые акцентированные буквы заменяются на английские буквы» После поиска вокруг на форумов, я обнаружил, что перед строкой, содержащей символы с акцентом, можно поставить «N». Например:

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

«Сопоставление для базы данных в целом является Latin1_General_CI_AS»

Я не вижу, как это может произойти из-за SQL Server, так как Latin1_General_CI_AS рассматривает европейский «не АНГЛИЙСКОГО»письма:

--on database with collation Latin1_General_CI_AS 
declare @test_multilanguage_eu table 
(
    c1 char(12), 
    c2 nchar(12) 
) 

INSERT INTO @test_multilanguage_eu VALUES ('éÉâÂàÀëËçæà', 'éÉâÂàÀëËçæà') 

SELECT c1, cast(c1 as binary(4)) as c1bin, c2, cast(c2 as binary(4)) as c2bin 
FROM @test_multilanguage_eu 

выходы:

c1   c1bin  c2   c2bin 
------------ ---------- ------------ ---------- 
éÉâÂàÀëËçæà 0xE9C9E2C2 éÉâÂàÀëËçæà 0xE900C900 

(1 строка (s) пострадавших)

Я считаю, что вы просто должны проверить флажков Them Панель управления -> Язык и региональные стандарты -> вкладка Дополнительно -> таблицы преобразования кодовых страниц и убедитесь, что вы оказываете в той же кодовой странице, что и вы ее сохраняете.
Преобразование в Юникод из кодировок, используемых клиентами, может привести к проблемам с возвратом веб-клиентам, мне кажется.

Я считаю, что большинство европейских классификаторов сортировки используют кодовую страницу 1252 [1], [2].

Update:
ВЫБРАТЬ COLLATIONPROPERTY ('Latin1_General_CI_AS', 'CODEPAGE') выходы 1252

[1]
http://msdn.microsoft.com/en-us/library/ms174596.aspx
[2]
для Windows 1252
http://msdn.microsoft.com/en-us/goglobal/cc305145.aspx

Смежные вопросы