搜尋
首頁資料庫mysql教程数据转换冲突及转换过程中大对象的处理

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

数据转换冲突及处理
  数据转换冲突:
  在数据转换过程中,要想实现严格的等价转换是比较困难的。必须要确定两种模型中所存在的各种语法和语义上的冲突,这些冲突可能包括:
  (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
解釋酸的特性(原子,一致性,隔離,耐用性)。解釋酸的特性(原子,一致性,隔離,耐用性)。Apr 16, 2025 am 12:20 AM

ACID屬性包括原子性、一致性、隔離性和持久性,是數據庫設計的基石。 1.原子性確保事務要么完全成功,要么完全失敗。 2.一致性保證數據庫在事務前後保持一致狀態。 3.隔離性確保事務之間互不干擾。 4.持久性確保事務提交後數據永久保存。

MySQL:數據庫管理系統與編程語言MySQL:數據庫管理系統與編程語言Apr 16, 2025 am 12:19 AM

MySQL既是數據庫管理系統(DBMS),也與編程語言緊密相關。 1)作為DBMS,MySQL用於存儲、組織和檢索數據,優化索引可提高查詢性能。 2)通過SQL與編程語言結合,嵌入在如Python中,使用ORM工具如SQLAlchemy可簡化操作。 3)性能優化包括索引、查詢、緩存、分庫分錶和事務管理。

mySQL:使用SQL命令管理數據mySQL:使用SQL命令管理數據Apr 16, 2025 am 12:19 AM

MySQL使用SQL命令管理數據。 1.基本命令包括SELECT、INSERT、UPDATE和DELETE。 2.高級用法涉及JOIN、子查詢和聚合函數。 3.常見錯誤有語法、邏輯和性能問題。 4.優化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL的目的:有效存儲和管理數據MySQL的目的:有效存儲和管理數據Apr 16, 2025 am 12:16 AM

MySQL是一種高效的關係型數據庫管理系統,適用於存儲和管理數據。其優勢包括高性能查詢、靈活的事務處理和豐富的數據類型。實際應用中,MySQL常用於電商平台、社交網絡和內容管理系統,但需注意性能優化、數據安全和擴展性。

SQL和MySQL:了解關係SQL和MySQL:了解關係Apr 16, 2025 am 12:14 AM

SQL和MySQL的關係是標準語言與具體實現的關係。 1.SQL是用於管理和操作關係數據庫的標準語言,允許進行數據的增、刪、改、查。 2.MySQL是一個具體的數據庫管理系統,使用SQL作為其操作語言,並提供高效的數據存儲和管理。

說明InnoDB重做日誌和撤消日誌的作用。說明InnoDB重做日誌和撤消日誌的作用。Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?Apr 15, 2025 am 12:15 AM

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

在解釋中使用臨時狀態以及如何避免它是什麼?在解釋中使用臨時狀態以及如何避免它是什麼?Apr 15, 2025 am 12:14 AM

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。