国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

不能坐視了!Oracle數(shù)據(jù)庫varchar2字段擴容,每月總有那么一兩次。----- 優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題

這篇具有很好參考價值的文章主要介紹了不能坐視了!Oracle數(shù)據(jù)庫varchar2字段擴容,每月總有那么一兩次。----- 優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Oracle數(shù)據(jù)庫varchar2字段擴容-始末

今天,有后端小伙伴提了個sql工單。對我司服務(wù)商系統(tǒng)Oracle數(shù)據(jù)庫的一個mer_name字段擴容。

alter table T_MER_SETTLE modify mer_name VARCHAR2(100)

審批前,我查了一下當(dāng)前這個mer_name字段的長度是 VARCHAR2(64)。

基于對我司客戶名稱的長度通常不超過64字的了解,我下意識里感到奇怪:莫非存在長度超過64個文字的客戶名稱?這種情況應(yīng)該很少吧?什么公司的名字能有這么長呢?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-825166.html

然后,我找當(dāng)事人來詢問。他言說,當(dāng)時開發(fā)需求時,看到企業(yè)表里的mer_name是varchar2(100),就沿襲使用varchar2了,加上對系統(tǒng)里企業(yè)名稱長度通常不會超過64個漢字的認(rèn)識,就把新表的mer_name定義為varchar2(64)。 今天生產(chǎn)環(huán)境的告警顯示,在向這個T_MER_SETTLE表插入數(shù)據(jù)時出現(xiàn)“字段值超長”持久化失敗的bug,這才得知Oracle的varchar2(64)與mysql的varchar(64)不同,mysql的varchar(64)能存最多64個字符,而Oracle的varchar2(64)則不同。在數(shù)據(jù)庫字符集是UTF-8的情況下,varchar2在存漢字時,是每個漢字占3個字節(jié)。也就是說,這個varchar2(64)最多可以存64/3=21個漢字。

?

本著解決問題優(yōu)先的原則,我審批了sql工單并執(zhí)行sql。

?

優(yōu)秀的程序應(yīng)該盡可能地規(guī)避問題

不能坐視了!Oracle數(shù)據(jù)庫varchar2字段擴容,每月總有那么一兩次。----- 優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題

字段擴容,這是我們?nèi)粘i_發(fā)中經(jīng)常遇到的小事。我們服務(wù)商系統(tǒng)類似對varchar2字段擴容的案例,幾乎每月都發(fā)生。那么,針對這個字段擴容,大家有沒有琢磨過,我們?nèi)绾卧陂_發(fā)時就能規(guī)避呢?

優(yōu)秀的程序應(yīng)該盡可能地規(guī)避問題。我們來復(fù)盤一下這個事情。

有必要先說明一個情況,我司絕大多數(shù)系統(tǒng)以mysql數(shù)據(jù)庫為主,服務(wù)商系統(tǒng)是其中唯一一個使用Oracle數(shù)據(jù)庫的小眾系統(tǒng)。并且,服務(wù)商系統(tǒng)的日常維護或需求迭代較少,由我們技術(shù)團隊中的三個同學(xué)抽一部分精力兼管。 因此,大家對Oracle數(shù)據(jù)庫了解得并不多,相比mysql,就少多了。

好,繼續(xù)來復(fù)盤。
開發(fā)人員不了解varchar2這個技術(shù)點,憑著mysql數(shù)據(jù)庫經(jīng)驗和對業(yè)務(wù)的了解,定義了??mer_name VARCHAR2(64)?。
我在審批時,也不了解varcahr2這個技術(shù)點,就去反問開發(fā)同學(xué)。同樣,其他同學(xué),也未必清楚Oracle的varchar2這個數(shù)據(jù)類型的細(xì)節(jié)。

?

那么,如何規(guī)避呢?

無藥可救了嗎?

不!

我們事后了解到,Oracle的nvarchar2不區(qū)分字符類型,它將漢字、全角符號與數(shù)字、字母、半角符號等均視為一個字符。也就是說,nvarchar2(64)表示可存最大64個字符。注意這里不是字節(jié),而是字符。 包括 數(shù)字、字母、符號、以及漢字。同時,在存儲含有文字的字段時,Oracle開發(fā)規(guī)范里建議使用nvarchar2取代varchar2。

因此,我們可以做什么?

將數(shù)據(jù)庫里的mer_name的數(shù)據(jù)類型全部改為nvarchar2,以及其他的這種varchar2字段類型使用不當(dāng)?shù)淖侄巍?/p>

這以后,服務(wù)商系統(tǒng)再有迭代開發(fā)時,開發(fā)者CV時,就不會(或很少)再有varchar2的mer_name了,樂觀一點講,再出現(xiàn)因varchar2數(shù)據(jù)類型使用不當(dāng)而導(dǎo)致“字段值超長”持久化失敗的bug就會扼殺在搖籃里。

?

【附】Oracle數(shù)據(jù)類型varchar2與nvarchar2

  1. varchar -?Oracle不建議使用varchar類型(我在DBeaver中新建varchar字段時自動建成了varchar2,無論是所見即所得的操作方式,還是執(zhí)行DDL方式)
  2. varchar2 -?varchar2(20)?表示可存最大20個字節(jié)長度的字符串。?數(shù)字/字母/半角符號?占一個字節(jié)。?對于全角符號或漢字,則要看字符集,GBK的話,一個漢字占2個字節(jié);UTF-8的話,一個漢字占3個字節(jié)。
  3. nvarchar -?Oracle中沒有nvarchar這個數(shù)據(jù)類型
  4. nvarchar2 -?nvarchar2(20)?表示可存最大20個字符。注意這里不是字節(jié)了,而是字符。?包括?數(shù)字、字母、符號、以及漢字。每個字符占2個字節(jié)存儲。
?
  • varchar2是Oracle提供的特定數(shù)據(jù)類型,Oracle可以保證varchar2在任何版本中該數(shù)據(jù)類型都可以向上或向下兼容。
  • nvarchar2雖然更占空間,但是它有更好的兼容性。尤其是當(dāng)字段包含漢字的情況下,推薦使用nvarchar2。? - - - - - - - - 我們服務(wù)商系統(tǒng)Oracle數(shù)據(jù)庫里,對于mer_name等包含漢字的字段,大家往往沿襲使用varchar2(100甚至更大),我們在新建表里涉及到這個字段時,有開發(fā)者會誤以為Oracle的varchar2與mysql里的varchar相同,我們mysql應(yīng)用里約定mer_name是varchar(32) ,就在Oracle庫里定義成了 varchar2(32) ,結(jié)果,服務(wù)商系統(tǒng)在生產(chǎn)運行過程中,出現(xiàn)插入mer_name因字段值超長而持久化數(shù)據(jù)庫失敗。 - - - - - - - -?優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題。因此,以后在服務(wù)商系統(tǒng)里,當(dāng)定義包含漢字的字段時,使用?nvarchar2,而非?varchar2。?因此,在服務(wù)商系統(tǒng)作為我司系統(tǒng)的小眾系統(tǒng)的背景下,Oracle的技術(shù)特性我們不一一曉知是可以理解和接受的。而如何在不一一曉知這些技術(shù)特性的情況下,能夠規(guī)避這些技術(shù)特性帶來的bug,需要我們引起思考和實踐摸索。
?

?【附】字段值超長,程序異常截圖↓

不能坐視了!Oracle數(shù)據(jù)庫varchar2字段擴容,每月總有那么一兩次。----- 優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題

?

到了這里,關(guān)于不能坐視了!Oracle數(shù)據(jù)庫varchar2字段擴容,每月總有那么一兩次。----- 優(yōu)秀的程序應(yīng)總是盡可能地規(guī)避問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [SQL Server]SQL Server數(shù)據(jù)庫中如何將時間日期類型(DateTime)轉(zhuǎn)換成字符串類型(varchar,nvarchar)

    SQL Server數(shù)據(jù)庫中,如何將時間日期類型(DateTime)的數(shù)據(jù)轉(zhuǎn)換成字符串類型(varchar,nvarchar),并對其進行 yyyy-mm-dd 形式的格式化輸出 使用SQL Server的 CONVERT() 函數(shù),如下: SELECT LEFT(CONVERT(VARCHAR, GETDATE(), 120), 10) 或者 SELECT CONVERT(VARCHAR(10), GETDATE(), 120) 在SQL Server 2012及以上版本中,新增

    2024年02月07日
    瀏覽(61)
  • 數(shù)據(jù)庫數(shù)據(jù)恢復(fù)-Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)-Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境: Oracle數(shù)據(jù)庫ASM磁盤組有4塊成員盤。 數(shù)據(jù)庫故障分析: Oracle數(shù)據(jù)庫ASM磁盤組掉線 ,ASM實例無法掛載,用戶聯(lián)系我們要求恢復(fù)oracle數(shù)據(jù)庫。 數(shù)據(jù)庫數(shù)據(jù)恢復(fù)工程師拿到磁盤后,先將所有磁盤以只讀方式進行扇區(qū)級別的鏡像備份,后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢

    2024年02月13日
    瀏覽(40)
  • Oracle數(shù)據(jù)庫

    Oracle數(shù)據(jù)庫

    ①層次型數(shù)據(jù)庫 ②網(wǎng)狀型數(shù)據(jù)庫 ③關(guān)系型數(shù)據(jù)庫(主要介紹) E-R圖:屬性(橢圓形),實體(矩形),聯(lián)系(菱形-一對一、一對多、多對多) 注:有的聯(lián)系也有屬性 關(guān)系型數(shù)據(jù)庫的設(shè)計范式: 第一范式(1NF):屬性不可再分,字段保證原子性 第二范式(2NF):在滿足1

    2024年02月08日
    瀏覽(33)
  • Oracle 數(shù)據(jù)庫恢復(fù)刪除的數(shù)據(jù)

    需求描述: 同事讓刪除臟數(shù)據(jù),結(jié)果刪錯了,需要恢復(fù)數(shù)據(jù) 思路: 利用閃回恢復(fù)數(shù)據(jù)只能恢復(fù)15分鐘之內(nèi)的,后面undo空間會被重寫,就恢復(fù)不了,所以刪除數(shù)據(jù)后,要謹(jǐn)慎再三確認(rèn),若發(fā)現(xiàn)不對,則利用閃回恢復(fù) 先查詢刪除時的時間節(jié)點的快照 查到時間戳之后 閃回恢復(fù)數(shù)

    2024年01月24日
    瀏覽(36)
  • 【數(shù)據(jù)庫】日常使用PL/SQL 登錄ORACLE 數(shù)據(jù)庫查詢數(shù)據(jù)

    一、PL/SQL 登錄方式 username: ##訪問數(shù)據(jù)庫的賬號 password: ##訪問數(shù)據(jù)庫的密碼 Databse: ##數(shù)據(jù)庫IP地址/實例名 數(shù)據(jù)庫集群心跳地址/實例名 Connect as : ##Normal,如果使用sysdba賬戶登錄選擇SYSDBA 二、PL/SQL使用SQL語句查詢 點擊上方導(dǎo)航欄,New,選擇SQL Window,即可再次輸入要查詢的

    2024年02月19日
    瀏覽(30)
  • 【Oracle】收集Oracle數(shù)據(jù)庫內(nèi)存相關(guān)的信息

    【Oracle】收集Oracle數(shù)據(jù)庫內(nèi)存相關(guān)的信息

    【聲明】文章僅供學(xué)習(xí)交流,觀點代表個人,與任何公司無關(guān)。 編輯|SQL和數(shù)據(jù)庫技術(shù)(ID:SQLplusDB) Oracle數(shù)據(jù)庫包含多個內(nèi)存區(qū)域,每個區(qū)域都包含多個子組件。 Oracle Database Memory Structures 根據(jù)具體問題的需要,可以通過如下命令收集Oracle數(shù)據(jù)庫內(nèi)存相關(guān)的信息。 例: 注:SET

    2024年01月21日
    瀏覽(30)
  • Oracle數(shù)據(jù)庫面試題 精選 Oracle 面試題

    1.解釋冷備份和熱備份的不同點以及各自的優(yōu)點 冷備份 發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,將關(guān)鍵性文件拷貝到另外位置的一種說法。適用于所有模式的數(shù)據(jù)庫。 優(yōu)點 1. 是非常快速的備份方法(只需拷貝文件) 2. 容易歸檔(簡單拷貝即可) 3. 容易恢復(fù)到某個時間點上(只

    2024年02月05日
    瀏覽(25)
  • oracle數(shù)據(jù)庫巡檢腳本

    用于Oracle數(shù)據(jù)庫巡檢的示例腳本:?

    2024年02月14日
    瀏覽(24)
  • 快速監(jiān)控 Oracle 數(shù)據(jù)庫

    Oracle 數(shù)據(jù)庫在行業(yè)內(nèi)應(yīng)用廣泛,通常存放的非常重要的數(shù)據(jù),監(jiān)控是必不可少的,本文使用 Cprobe 采集 Oracle 監(jiān)控數(shù)據(jù),極致簡單,分享給大家。 安裝配置 Oracle 簡單起見,我使用 Docker 啟動 Oracle,命令如下: 如上命令啟動之后,Oracle 的監(jiān)聽端口是 1521,用戶名/密碼是 syst

    2024年01月20日
    瀏覽(61)
  • ORACLE數(shù)據(jù)庫 開窗函數(shù)

    開窗函數(shù) 2.1開窗函數(shù)的定義及語法 開窗函數(shù)(又名:分析函數(shù),窗口函數(shù),OLAP函數(shù)) 聚合函數(shù):將數(shù)據(jù)按照一定的規(guī)則分組,統(tǒng)一分析各組的某項情況,每個分組返回一行結(jié)果 開窗函數(shù):將數(shù)據(jù)按照一定的規(guī)則分組,統(tǒng)一分析各組的某項情況,每行數(shù)據(jù)返回一行結(jié)果 (

    2024年02月11日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包