【问题标题】:.Net BlockCopy and DB2 Character Conversion using CodePage.Net BlockCopy 和使用 CodePage 的 DB2 字符转换
【发布时间】:2013-02-20 18:59:41
【问题描述】:

我了解可以在数据库的不同表中以不同方式设置排序规则。整理自What does character set and collation mean exactly?了解

有一个查询从 char 结果执行CAST,如下所示。不涉及任何表。我想,应用的编码将基于数据库级别的排序规则。这个假设正确吗?

SELECT  CAST ( SSS.id_encrypt ('E','0000000{0}') AS CHAR(100) FOR BIT DATA)  
AS ENCRYPT_ID FROM FFGLOBAL.ONE_ROW FETCH  FIRST 1 ROW ONLY

问题

在@AlexFilipovici [.Net BlockCopy ] 给出的问题Get Byte[] from Db2 without Encoding 中,与CAST 结果相比,提供了不同的结果。如果没有关联的codepage,为什么会这样?

基于 National language support - Character conversion

位数据(定义为 FOR BIT DATA、BLOB 或二进制字符串的列)不与任何字符集相关联。

参考

  1. Get Byte[] from Db2 without Encoding
  2. Default code page for new databases is Unicode
  3. National language support - Character conversion

【问题讨论】:

  • 不要问这样一个涉及两个不同 RDBMS 的问题,因为答案可能完全不同。它们是两个独立的问题。 (实际上编辑我看到你实际上问了 四个 问题!)
  • @MartinSmith 谢谢。我已更新问题以使其特定于 DB2
  • 我认为您在这里提出的问题太多了。此外,如果您希望迁移此问题,我们的 DBA 站点可能更适合此问题。
  • @Kev 要回答这个问题,需要.Net 相关知识(.Net BlockCopy)。因此,转移到 DBA 站点并不好。

标签: c# .net


【解决方案1】:

要在 SQL Server 中查找数据库级别的排序规则,请尝试以下操作:

SELECT DATABASEPROPERTYEX('databasename', 'Collation');

更多:DATABASEPROPERTYEX

【讨论】:

  • 谢谢。然而,这只是问题的 1/3。
  • 我已根据其他用户的 cmets 更新了问题以使其特定于 DB2。
【解决方案2】:

回答您的问题:

#1:在基于字符的数据类型(在 DB2 中)上指定 FOR BIT DATA 意味着 DB2 存储/返回原始数据而不关联任何代码页(即,它只是一个字节字符串,不会经过任何代码页客户端和服务器之间的转换)。

#2:在 DB2 for Linux, UNIX and Windows 中,您可以通过查询 SYSIBMADM.DBCFG 来确定数据库的排序规则

 select name,value
  from sysibmadm.dbcfg
 where name in ('codepage','codeset');

#3:根据@Iswanto San:

SELECT DATABASEPROPERTYEX('databasename', 'Collation');

【讨论】:

  • 在问题stackoverflow.com/questions/15153100/… 中,@AlexFilipovici 给出的答案与 CAST 结果相比提供了不同的结果。有no codepage associated为什么会这样?
  • 如果有关联的代码页,那么 DB2 服务器将在数据库的代码页(即数据在数据库中的存储方式)和客户端应用程序的代码页之间执行代码页转换。您指出的解决方案中的GetBytes() 函数正在处理已在客户端/服务器之间修改的数据。
  • 为什么这个问题和上面的评论不能回答你的问题?
猜你喜欢
  • 2011-11-05
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多