Многоязычная поддержка - PullRequest
       14

Многоязычная поддержка

2 голосов
/ 16 ноября 2010

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Не существует быстрого решения.

Обновления и вставки неверны и требуют исправления.

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

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

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 ряд)

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

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

Обновление:
ВЫБРАТЬ 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

...