当前位置: 首页 > 知识库问答 >
问题:

在使用CODEUNITS32更改表以支持unicode行为之后,应用程序的行为会发生什么变化?

璩华辉
2023-03-14

我们正处于将一些表从AS400 DB迁移到DB2 LUW(V11.1)的阶段。在迁移过程中,我们在源数据库(AS400)中发现了一些特殊字符(欧元)-(带有CHAR的列),如果我们无法用CODEUNITS32更改表列,DB2 LUW数据库配置字节编码设置为UTF-8,则会导致错误。

我们想了解,在将char列更改为CODEUNITS32之后,应用程序的行为会是什么,我是否需要更新应用程序级别的任何配置(C&Java应用程序)来处理两个字符编码集?

在更改为CODEUNITS32之后--我的C应用程序能够编译并能够处理字符字节从每字符8位(UTF-8)到每字符4字节(CODEUNITS32)的更改?-我的Java应用程序能够处理字符字节的变化,从每字符8位(UTF-8)到每字符4字节(CODEUNITS32)?

我们做了一些试点测试,在从CHAR中将列定义设置为CODEUNITS32后,手动向表中插入特殊字符,测试成功。

共有1个答案

郭兴平
2023-03-14

对列使用codeUnits32的字符串单元规范不会更改列的编码,对于char/varchar列,数据仍然以UTF-8存储。

它会将列的物理长度(char)或最大长度(varchar)改变4倍。

它还在某些函数(如substr())中启用“字符语义”,以便在处理codeunits32列时,它们处理字符,而不是字节。(substring()将始终使用字符语义(除非处理用于位数据的列))

因此char(4)char(4OCTETS)是4个字节长的,如果在UTF-8中都是单字节的话,最多可以容纳4个字符。对于3字节长的欧元,它只能保存4而不能保存42

字符(4CODEUNTIS32)为16字节长,最多可容纳4个字符。它可以保存欧元,但不能保存2345

值得考虑避免char(x CODEUNITS32)而首选varchar(x CODEUNITS32)UTF-8不能很好地处理固定宽度的数据类型。更常见的UTF-8字符为1或2字节长,因此通常字符(xcodeunits32)列将保留超过50%的空格填充。

https://www.ibm.com/support/knowledgecenter/en/ssepgg_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008470.html

codeUnits32

指示length属性的单位是Unicode UTF-32代码单位,以字符为单位进行近似计数。

此长度单位不影响数据类型的基础代码页。

https://www.ibm.com/support/knowledgecenter/en/ssepgg_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008471.html

 类似资料:
  • 如果<code>targetSdkVersion 我的应用程序< code>targetSdkVersion是27版本,我运行在< code>8.0.0[26]设备上。我得到了下面链接中描述的< code > IllegalStateException ,因为我使用了一个对话框< code>Activity。 只有全屏不透明的活动才能请求方向 有两个建议的选项。从中删除或将更改为26。这两个解决方

  • 问题内容: 我有一个问题:如果我们有一个不使用线程的应用程序,我们可以通过两种方式链接它: 1)照常链接,不包含和 2)向链接添加两个库:libpthread和libdl。 例如 默认情况下,两个库都是动态链接的: 版本和版本之间会有多少区别?在应用程序本身和int glibc内部将以什么不同的方式工作?pthread的链接会在内部将某些内容从不安全线程更改为线程安全算法吗? 例如 在a1跟踪中,

  • 问题内容: 据说Golang是 编译 语言,但它是什么意思由 编译 ?如果golang应用程序已编译为机器代码,为什么我不能只分发二进制文件(当然是在相应的arch和平台上)而不是分发东西? 问题答案: 编译二进制文件后, 可以 将其分发到具有相同体系结构的计算机上。 等只是编译所必需的。

  • 我正在写一个Android应用程序,现在我正在设计它。我正在使用一个自定义主题,它是。我真的很喜欢,因为当您点击并按住它时,它的按钮具有特殊效果。如下图中较低的按钮: 上面的按钮已更改颜色。现在,当我点击那个按钮时,它没有那种效果。我真的不明白为什么。有谁能告诉我为什么会发生这种情况,以及我如何用彩色按钮获得相同的效果? 而且,彩色按钮看起来更胖。