Вчера я задал вопрос о переходе нашей базы данных на кодировку 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.
Теперь я снова в тупике.