dimp時報錯,字串截斷
現象描述
達夢也有自己的邏輯備份工具(dexp 、dimp )用法和Oracle 類似,詳細用法可以參考官方手冊dexp&dimp.pdf
但是,我們有時候在進行dimp 時,會碰到字串截斷的問題。
碰到這種問題,我們怎麼解決呢?
受限我們一定要非常明確,字串截斷這個報錯,一定就只是精度不足,這裡只是針對兩種可能的情況的,描述下該問題。
只需要考慮兩個問題:
Ø 是否表結構不一致,就是dexp 的表,是varchar (500 ),我們匯入的表只是varchar (400 )
這種情況少,因為有時候我們經常是全使用者新建匯入,表結構也是源端帶入過來的。
Ø Dexp 源端的資料庫例項字符集,是否和dimp 目的端資料庫例項的字符集一致
這個是我們可能沒有注意的問題。
處理方法
處理方法一:核查表結構是否一致
是否表結構不一致,就是dexp 的表,是varchar (500 ),我們匯入的表只是varchar (400 )
這個問題好理解,就是字面意思,我們只需要把目的表的精度改成和源端一致,重新清空目的表,再匯入即可。
處理方法二:核查資料庫例項字符集
我們碰到這個問題的時候,實際上就是我們從UTF-8 的資料庫例項上dexp 出來的資料庫,往GB18030 的資料庫例項上dimp ,才會碰到這個問題。
預設情況下,達夢資料庫例項的varchar 欄位的精度,表示的含義是位元組,而對於漢字而言,在UTF-8 編碼下的位元組佔用,是比GB18030 編碼下的位元組佔用,要大。
所以反過來說,對於dexp&dimp 搬過來的表結構,都是一致的情況下,比如:都是varchar (400 ),可以存放的漢子個數,是不一樣的。
備註:
- 對於同一專案內的資料庫例項、可能需要互相進行資料傳遞的例項之間,務必把資料庫底層引數(含字符集)規劃並切實設定成一致!
- 同一專案內的資料庫例項,請務必保持一致、非同一專案內,有資料傳遞需求,但是相關性不搞,且確實不能保持一致的字符集,可以通過手動放大目的端資料庫例項上的varchar 欄位精度。為什麼可以這樣處理,方法二中已經說明。
這是一個把資料庫例項中目標表中的所有varchar 欄位,精度放大一倍的指令碼(當成SQL 執行):通過控制遊標查出來的表即可。
declare begin for rs in( select sch.name sch,tab.name tab,col.name col,COl.length$ len from sysobjects sch,sysobjects tab ,syscolumns col where sch.id=tab.schid and sch.name||'.'||tab.name in ( 'USER.TABUTKMONITOR', 'USER.TABUTHORIZATIONRISKLOG', 'USER.TABUSTOMER', 'USER.TABARD', 'USER.TABOSSREPORT', 'USER.TABUDGETENTITYCARDS', 'USER.TABRANSACTIONLOG', 'USER.TABCCOUNT', 'USER.TABSTOMERINFO', 'USER.TABRANSACTIONLOG', 'USER.TABUTHORIZATIONRISKLOG' ) and tab.id=col.id and col.TYPE$ in ('VARCHAR','VARCHAR2') ) loop declare begin execute immediate 'alter table "'||rs.sch||'"."'||rs.tab||'" modify '||rs.col||' varchar('||rs.len*2||');'; exception when others then print(sqlerrm); end; end loop; end; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949798/viewspace-2660603/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python如何截斷字串Python字串
- 達夢資料庫DM Exception字串截斷錯誤,略坑~資料庫Exception字串
- 讀取popen輸出結果時未截斷字串導致的命令列注入字串命令列
- 攔截線上 sql 異常報錯SQL
- Sql Server對等複製中將截斷字串或二進位制資料。 (源: MSSQLServer,錯誤號: 8152)SQLServer字串
- char[] 轉換string時的自動截斷問題
- System.data.sqlclient.sqlexception:將截斷字串或二進位制資料終止SQLclientException字串
- tar解包時報錯
- 物件業務的截斷介面物件
- flutter 編譯報錯總結(不斷更新)Flutter編譯
- 前端開發入門到實戰:css單行截斷和多行截斷問題前端CSS
- linux 日誌log檔案 截斷Linux
- yii執行phpunit時報錯PHP
- python中字串格式判斷Python字串
- 判斷字串是否唯一字串
- python如何判斷字串相等Python字串
- 判斷URL字串是否合法字串
- 判斷字串是否為空字串
- 【JAVA】判斷字串非空Java字串
- CSS 實現文字"不定行數"截斷CSS
- 純 CSS 實現多行文字截斷CSS
- mysql 報錯json字串 中文漢字轉義的問題MySqlJSON字串
- laravel11: 安裝時報錯Laravel
- 【AutoCAD .NET】建立Hatch時報錯eInvalidInput
- 使用 Composer 安裝 Laravel 時報錯Laravel
- 靜默安裝oracle時報錯Oracle
- js判斷字串是否為空JS字串
- java判斷字串是否為空Java字串
- JavaScript判斷字串是否為空JavaScript字串
- AS斷點除錯斷點除錯
- SQL-基礎語法 - 截斷和偏移SQL
- MySQL UNDO表空間獨立和截斷MySql
- Laravel 54 配置 Elasticsearch 時的報錯提示LaravelElasticsearch
- laravel 資料庫遷移時報錯Laravel資料庫
- 支付寶沙箱除錯時遭到攔截,提示存在釣魚網站風險除錯網站
- Vscode斷點除錯VSCode斷點除錯
- webstorm 斷點除錯WebORM斷點除錯
- LeetCode-097-交錯字串LeetCode字串