如果我使用nchar列,如何将捷克文本存储在IBM819数据库中?

时间:2012-03-02 11:56:32

标签: .net vb.net unicode informix

我昨天问了一个问题,关于将数据库从IBM819(单字节字符,Latin1子集)切换到UTF-8(多字节字符,unicode)编码,因为需要支持新的Czech个字符的文字输入。

我刚刚被一位nchar和nvarchar列类型的同事提醒过,我们都没有用过它们。

如果我要将相关列定义为nchar和nvarchar而不是char和varchar,那么我需要做些什么来允许我当前的IBM819数据库使用来自我的.net应用程序的这个新的IBM819不兼容文本?

所有转化都是自动的吗?

我是否需要编写一些可怕的转换代码?

这只是一个不可行的解决方案吗?我正在追逐彩虹?

编辑:是的,我定义了一个“nchartest”表,其中包含nchar(500)类型的单个列“ntest”。

我通过.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

然后我用100个左右的捷克文本字符替换了lipsum字符串,并试图插入导致.net Informix接口抛出IfxException,并显示消息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 个答案:

答案 0 :(得分:3)

NATIONAL CHARACTER(N [VAR] CHAR)被解释为UTF-16代码单元是特定于MS SQL Server的特征。 ANSI SQL标准没有指定该行为;其他数据库对NCHAR有不同的反应。

Informix使用它来决定是使用区域设置排序规则而不是代码单元排序规则,但它不会影响基础字符集,因此它不会对您有所帮助。

您仍然需要使用UTF-8语言环境,是的,如果您使用数据库已经有现有的终端应用程序,那么它们很可能无法使用处理Unicode。