Если я использую столбец nchar, как я могу хранить чешский текст в базе данных IBM819? - PullRequest
1 голос
/ 02 марта 2012

Вчера я задал вопрос о переходе нашей базы данных на кодировку UTF-8 (многобайтовый символ, юникод) из IBM819 (однобайтовый символ, Latin1 подмножество) из-за нового требования для поддержки ввода текста чешский символов.

Мне только что напомнил коллега о типах столбцов nchar и nvarchar, которые никто из нас на самом деле никогда не использовал.

Если бы я определил соответствующие столбцы как nchar и nvarchar вместо char и varchar, что бы мне пришлось сделать, чтобы моя база данных IBM819 работала с этим новым несовместимым с IBM819 текстом, поступающим из моего приложения .net

Все ли преобразования будут автоматическими?

Нужно ли мне написать какой-нибудь страшный код преобразования?

Это просто нежизнеспособное решение, и я гонюсь за радугой?

РЕДАКТИРОВАНИЕ: Правильно, я определил таблицу "nchartest", содержащую один столбец, "ntest" типа nchar (500).

Я подключился к этому через .net код и подтвердил, что можно ввести 500 символов lorem ipsum :

Dim insertString As String = "INSERT INTO nchartest VALUES (?)"
Dim insertCommand As New IfxCommand(insertString, cConnection, tTransaction)
insertCommand.Parameters.Add("incident_recno", IfxType.NChar).Value = "[lipsum]"
Return insertCommand.ExecuteNonQuery

Затем я заменил строку "Lumpsum" примерно на 100 символов чешского текста, и попытался вставить, что вызвало исключение IfxException интерфейсом .net Informix, с сообщением ERROR [HY000] [Informix .NET provider]Unspecified System Error = -21005.

Следуя некоторым исследованиям, которые я провел вчера, я попытался установить для своей настройки CLIENT_LOCALE в строке подключения значение en_US, чтобы оно соответствовало сообщенному Threading.Thread.CurrentThread.CurrentUICulture, но это подключение не удалось открыть из-за ERROR [HY000] [Informix .NET provider][Informix]Unable to load locale categories.

После этого я попытался установить CLIENT_LOCALE=en_US.unicode, что привело к ERROR [HY000] [Informix .NET provider][Informix]Unspecified System Error = -31142.

Теперь я снова в тупике.

1 Ответ

3 голосов
/ 02 марта 2012

НАЦИОНАЛЬНЫЙ ХАРАКТЕР (N [VAR] CHAR), интерпретируемый как кодовые единицы UTF-16, является особенностью, специфичной для MS SQL Server. Стандарт ANSI SQL не определяет такое поведение; другие базы данных по-разному реагируют на NCHAR.

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

Вам все равно придется использовать локаль UTF-8 в любом случае, и да, если у вас есть терминальные приложения, использующие базу данных, то очень маловероятно, что они смогут справиться с Unicode.

...