ホームページ データベース mysql チュートリアル 数据转换冲突及转换过程中大对象的处理

数据转换冲突及转换过程中大对象的处理

Jun 07, 2016 pm 05:58 PM
対立 データ変換

数据转换冲突及转换过程中大对象的处理方法,大家可以参考下。

数据转换冲突及处理
  数据转换冲突:
  在数据转换过程中,要想实现严格的等价转换是比较困难的。必须要确定两种模型中所存在的各种语法和语义上的冲突,这些冲突可能包括:
  (1)命名冲突:源数据源的标识符可能是目的数据源中的保留字。
  (2)格式冲突:同一种数据类型可能有不同的表示方法和语义差异。
  (3)结构冲突:如果两种DBMS之间的数据定义模型不同,如为关系模型和层次模型,则需要重新定义实体属性和联系,以防止属性或联系信息的丢失。
  (4)类型冲突:不同数据库的同一种数据类型存在精度之间的差异。
  (5)其他冲突:不同数据库的大对象类型存在不同的约束,而且存在一些特殊类型。如SQL SERVER中一个表中有多于一个TEXT或IMAGE的字段时,出现错误。而ORACLE也不允许一个表中的BLOB和LONG类型多于一个。
  冲突处理方法:
  对于以上数据转换中的冲突,可进行相应的冲突处理。
  对于命名冲突,可以先检查数据源中的保留字,建立保留字集合,对于保留字中的命名冲突,根据需要重新命名。
  对于格式冲突,可以根据ODBC SQL类型从数据源的驱动程序中取出相对应的数据源的数据类型后,对一些特定的类型进行特殊的处理。对于字符型数据中含有“'”字符的情况,在数据转换过程中需通过转义符作特殊处理,否则会把它误当作字符串分隔符。
  对于不同数据库的同一数据类型的精度冲突,类型转换中将ODBC SQL类型和精度结合起来决定源数据类型和目标数据类型的映射关系。找出目的数据源中与源数据源类型的精度最匹配的数据类型作为缺省的映射关系。
  转换过程中的数据类型匹配,日期型数据最好先转换成字符型,然后根据不同的目标数据源分别作不同的处理。如ORACLE中使用TO_DATE函数,而FOXPRO中使用CTOD函数将日期格式的字符串转换成日期。
  对于SQL SERVER中的TEXT、IMAGE类型,在进行转换时需要做出选择,或者把TEXT镜像为VARchar2(4000),或者镜像为LONG 类型,但Long 类型一个表里只能有一个。对于ORACLE,TEXT类型可以映像为CLOB类型,而IMAGE可以镜像为BLOB。CLOB类型可以在一个ORACLE表里有多列。
  读取数据源的元数据
  数据源的元数据类型
  元数据种类 元数据信息 用途
  数据源连接信息 数据库名,驱动器, 用于连接源数据源和目的数据源
  服务器,DSN名,
  数据源描述,用户名等
  表信息 表名,表属主, 用于数据转换中创建表
  表模式,表类型
  列信息 列名,类型,宽度, 用于数据转换中表的创建以及列映射
  精度,标度,是否为空
  类型信息 类型名,最大列宽度, 用于数据转换中表的创建以及类型映射
  最大最小标度,
  前后缀字符,
  是否接受空,
  关键字列表
  键信息 主键名,主键列, 用于数据转换中表模式的转换
  外键名,外键列,
  外键关联列
  其它对象信息:索引信息,存储过程信息,权限信息等 用于数据转换中数据库对象的转换。
  数据源的元数据读取方法:
  (1)调用ODBC API函数:
  可以直接调用ODBC API函数读取数据源的元数据。即分别调用以下函数SQL Tables,SQL Columns, SQL DescribeCol,SQL Get TypeInfo,SQL Foreign Keys,SQLPrimary Keys,SQL ProcedureColumns,SQL Procedures, SQL Statistics,SQL TablePrivileges,SQL Column Privileges获得数据源中的表信息,列信息,类型信息,键信息以及其他对象信息等。其主要步骤是连接数据源,分配语句句柄,然后调用ODBC API来获取各种元数据信息。
  然而直接调用ODBC API函数比较复杂,各种参数不易理解,且直接获取返回的数据较困难。VC++的MFC类库对ODBC的API进行封装,部分简化了ODBC调用(尤其是对数据库记录集的操作),但单纯利用MFC类获取异构型数据库的结构信息仍然比较困难,因此需要将MFC和直接调用ODBC API方法结合起来。利用ODBC接口函数重载了MFC中CRecordset类的部分成员函数,创建CTable,CColumns,CTypes,CPrimaryKeys等类。利用这些新创建的类,可以很方便的获取异构型数据库结构信息。
  (2)通过ADO对象:
  通过ADO中CONNECTION对象的GetTableNames 方法可以得到数据源的表信息,而通过ADO中RECORDSET对象中的FieldDefs属性可以得到数据集的各种列信息和类型信息。在得到数据源的元数据前,必须先创建CONNECTION对象连接数据源,并通过数据集对象RECORDSET来打开相应的数据表,之后即可以取得相应的数据源的元数据。
  数据类型转换
  3异构数据源数据类型概述:
  对不同数据库系统,每个DBMS都定义了一套自己的数据类型,但不论数据类型在各个系统中如何变化,其功能都满足用户的数据处理基本要求,如数值型,包括整型、实型、浮点型、双精度型等;字符型,包括定长、变长等;日期型,包括年、月、日和小时、分、秒等;长字符型,包括文本类型,还有钱币型等。随着数据库系统的不断发展和版本的不断升级,数据类型的种类也不断增多,如超文本和二进制处理多媒体和大文本的数据类型。这些带有共性的东西,给系统间的数据转换带来了可能和方便,但不同的数据库的数据类型也是有差异的。其自身定义和扩充之间的区别,也给系统间的数据转换带来了许多困难。例如,DBMS返回的日期和时间数据格式在各个DBMS中有很大的不同。有些系统以8字节整数格式返回日期和时间,另外一些以浮点数格式返回。并且有的DBMS含有LONG类型,其它DBMS无此类型。所以异种数据库数据类型转换的关键是找出其中的对应关系。
  数据类型转换方法一:(设计类型映射表)
  为了实现相互数据转换,必须设计多个相应的双向数据转换程序并且解决不同的数据类型匹配问题。当增加一个数据库系统时,相应要解决该数据库系统与已存在的多个异构库的数据类型匹配问题,并增加多个对应转换程序。为了实现程序的扩展性,可以通过设计类型映射表来解决类型转换问题。
  将不同数据库系统数据类型的对应关系和相应的数据转换处理程序分离开,使数据转换程序相对独立,而把类型转换关系在专门的表结构中存储。通过对不同数据库系统之间的数据类型进行详细而深入的分析,找出了不同数据库系统不同版本的各个不同类型之间缺省的类型对应关系及可能存在的对应关系,将这些数据预先存入类型映射表中。
  数据类型转换方法二:(利用ODBC SQL类型)
  存储在数据源中的数据都有一个数据类型,称为数据源数据类型或SQL数据类型。SQL数据类型是按照SQL-92标准由每一个DBMS定义,可以是某个数据源特有的。驱动程序在ODBC SQL语法及驱动程序数据类型中也定义了一套数据类型称为ODBC SQL数据类型(以SQL前缀开头的数据类型)。每个驱动程序负责映射特定数据来源的SQL数据类型到ODBC SQL数据类型标识符。因此,不同的数据源在进行数据转换的过程中可以通过ODBC SQL数据类型标识符作为基准来得到数据类型的缺省映射关系。驱动程序通过函数SQLGetTypelnfo返回数据源的SQL数据类型和ODBC SQL数据类型的映射关系,在函数SQLCo1Attributes,SQLDescribeCol和 SQLDescribeParm中,驱动程序还用ODBC SQL数据类型来描述列和参数的数据类型。
  此外,ODBC还提供一套以SQL_C前缀开头的ODBC C数据类型。ODBC C数据类型指出了在应用程序中用于存储数据的C缓冲区的数据类型。所有驱动程序必须支持所有的C数据类型,而且支持所有C类型到相应的SQL类型的转换,并且所有的驱动程序至少支持字符SQL类型,使得DBMS的数据类型都能映射到一种C语言的数据类型,这样在传递过程中不会改变数据。每一个SQL数据类型与一个ODBC C数据类型相适应。在从数据源返回数据之前,驱动程序将它转换到指定的C数据类型。在发送数据到数据来源之前,驱动程序将它从指定C数据类型转换到SQL数据类型。
  数据转换过程中大对象的处理
  大对象类型概述:
  大对象类型BLOB全称为Binary Large Objects,即二进制大对象。可以把BLOB区别为三种形式:声像数据、二进制数据和大文本数据。因此,最常见的应用就是存储图形、声音等对象,此外大二进制对象、OLE对象也可以通过BLOB类型存入数据库,如果文本对象过大,超出了文本类型的规定长度,则必须用BLOB字段进行存储。我们在经常使用的编程环境中并不能直接支持BLOB字段,因此需要调用相应的函数完成BLOB的使用。
  不同的数据库系统对大对象类型的支持不同,常用数据库系统支持的大对象数据类型如表4所示:
  数据库系统支持的大对象数据类型:
  SQL SERVER "sql_variant","ntext","image","varbinary","binary","text"
  ORACLE "BLOB","LONG RAW","BFILE","RAW","CLOB","LONG"
  SYBASE "LONG VARchar"
  VFP "MEMO"
  ACCESS "OLE OBJECT","MEMO"
  KINGBASE "blob","text","bytea","varbinary","binary","text"
  大对象的存取方法:
  (1)利用MFC提供的CLongBinary类:
  VC存取大对象数据有众多方法,如OLE、ActiveX等,而VC的MFC提供的CLongBinary类可以方便地实现存取BLOB字段。使用CLongBinary类可以存取超过MAXINT数目的数据,最大为可以得到的内存容量。但数据完全保存在内存中,对超大量数据消耗太大。
  (2)利用ODBC的SQLGetData和SQLPutData函数:
  对于不能存储在单一缓冲区中的数据,在行中的其他数据已被获取之后,可以直接用SQLGetData分批从驱动程序检索这些数据。为了从一列检索长数据,应用程序首先调用SQLFetchScroll或SQLFetch移动一行,并且调用SQLGetData获取绑定列的数据。SQLPutData允许在应用程序语句执行时,把参数或字段送到驱动程序。该函数用来把字符或二进制数值送到。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

競合やエラーを回避するために NumPy ライブラリをアンインストールするためのガイド 競合やエラーを回避するために NumPy ライブラリをアンインストールするためのガイド Jan 26, 2024 am 10:22 AM

NumPy ライブラリは、科学計算とデータ分析のための Python の重要なライブラリの 1 つです。ただし、場合によっては、バージョンをアップグレードしたり、他のライブラリとの競合を解決したりする必要があるため、NumPy ライブラリをアンインストールする必要がある場合があります。この記事では、競合やエラーの可能性を回避するために NumPy ライブラリを正しくアンインストールする方法を読者に紹介し、特定のコード例を通じて操作プロセスを示します。 pip は Python のパッケージ管理ツールであるため、NumPy ライブラリのアンインストールを開始する前に、pip ツールがインストールされていることを確認する必要があります。

Win11の壁紙画面の競合を解決する方法 Win11の壁紙画面の競合を解決する方法 Jun 29, 2023 pm 01:35 PM

Win11の壁紙画面の競合を解決するにはどうすればよいですか?最近、一部のユーザーがコンピュータに壁紙ソフトウェアをインストールした後に黒い画面が表示されることがありますが、これはおそらく壁紙と画面の競合が原因であると考えられます。 Windows 11システムの壁紙画面の競合の問題の解決策を見てみましょう。 win11システムで壁紙画面が競合する問題の解決策 1. デスクトップの設定オプションでウィンドウを開きます。 2. [ファイル] メニューの [新しいタスクの実行] ボタンをクリックします。 3. 新しいタスクのポップアップ ボックスに「explorer.exe」と入力し、[OK] をクリックして保存し、リソース マネージャーを再起動します。

Pythonのデータ型エラーを解決するにはどうすればよいですか? Pythonのデータ型エラーを解決するにはどうすればよいですか? Jun 24, 2023 pm 01:24 PM

Python は、データ サイエンス、機械学習、人工知能などの分野で広く使用されている高水準プログラミング言語です。 Python は学びやすく使いやすいという性質により、最も人気のあるプログラミング言語の 1 つとなっています。ただし、他のプログラミング言語と同様に、Python ではデータを処理するときにさまざまな型エラーが発生します。これらのエラーはプログラムの実行に失敗する可能性があり、時間内に特定して解決しないと、開発者の貴重な時間とリソースが無駄になります。この記事ではPythonのデータ型エラーを解決する方法を紹介します。 1.データの種類

Python は XML データの HTML 形式への変換を実装します。 Python は XML データの HTML 形式への変換を実装します。 Aug 09, 2023 pm 12:28 PM

Python は XML データの HTML 形式への変換を実装します。ネットワーク開発とデータ処理のプロセスでは、XML (Extensible Markup Language) が一般的なデータ送信および保存形式です。 HTML (Hypertext Markup Language) は、Web ページを表示およびレイアウトするための標準形式です。場合によっては、Web ページに直接表示するために、XML データを HTML 形式に変換する必要があります。この記事では、Python を使用してこの変換処理を実装する方法を紹介します。まず、基本的な XML と HTML を理解する必要があります。

ホットキーの競合を解決する方法 ホットキーの競合を解決する方法 Feb 23, 2024 am 08:12 AM

ホットキーの競合を解決する方法 コンピューター技術の進歩に伴い、コンピューターの使用時にホットキーの競合の問題が頻繁に発生します。ホット キーとは、キーボード上のキーの組み合わせまたは個々のファンクション キーによって特定の操作または機能を実現することを指します。ただし、ソフトウェアやシステムによってホットキーの定義が異なるため、ホットキーの競合の問題が発生します。ホットキーを押すと、予期しない機能がトリガーされる場合や、まったく何も起こらない場合があります。この問題を解決するために、以下にいくつかの一般的なホットキー競合解決方法を紹介します。最初の解決策

SQL ステートメントを使用して MySQL でデータを変換および転送するにはどうすればよいですか? SQL ステートメントを使用して MySQL でデータを変換および転送するにはどうすればよいですか? Dec 17, 2023 pm 05:50 PM

MySQL でのデータの変換と転送は一般的なタスクです。このタスクを実行するにはさまざまな方法がありますが、最も一般的な方法は SQL ステートメントを使用することです。この記事では、SQL ステートメントを使用して MySQL でデータを変換および転送する方法を紹介し、具体的なコード例を示します。 1. データ変換 データ変換は、1 つ以上のデータ型を別のデータ型に変換するプロセスです。 MySQL では、CAST 関数と CONVERT 関数を使用してデータ型の変換を行うことができます。 CAST関数CAST関数

PHP では、pack() 関数の機能はデータをバイナリ文字列に変換することです。 PHP では、pack() 関数の機能はデータをバイナリ文字列に変換することです。 Aug 31, 2023 pm 02:05 PM

Pack() 関数は、データをバイナリ文字列にパックします。構文 Pack(format,args) パラメータ format - 使用する形式。可能な値は次のとおりです - a - NUL 埋め込み文字列 A - スペース埋め込み文字列 h - 16 進数文字列、下位ニブルが最初 H - 16 進数文字列、上位ニブルが最初 c - 符号付き文字 C - 符号なし文字 s - 符号付き short (常に 16 ビット) 、マシンバイトオーダー) S - 符号なし short (常に 16 ビット、マシンバイトオーダー) n - unsigned short (常に 16 ビット、ビッグエンディアンバイトオーダー) v - unsigned short (常に 16 ビット、リトルエンディアンバイトオーダー) i - 符号付き整数(マシンのサイズとバイト順序に依存します) I - なしの符号付き整数 (マシンのサイズとバイト順序に依存します)

PHP を使用して Modbus TCP データ変換とフォーマットを実装する方法 PHP を使用して Modbus TCP データ変換とフォーマットを実装する方法 Jul 17, 2023 pm 07:21 PM

PHP を使用して ModbusTCP データ変換とフォーマットを実装する方法 はじめに: Modbus は、産業用制御の分野で一般的に使用される人気のある通信プロトコルです。 ModbusTCP は、TCP/IP ネットワーク上の Modbus プロトコルのアプリケーション実装です。一般的なプログラミング言語として、PHP を使用して ModbusTCP データ変換とフォーマットを実装することもできます。この記事では、PHP を使用して ModbusTCP データ変換およびフォーマット操作を実装するコードを記述する方法を紹介します。 1.インストールが必要です

See all articles