[20211011]計算sql_id.sh指令碼的一些補充.txt
[20211011]計算sql_id.sh指令碼的一些補充.txt
--//前幾天改了計算sql_id的指令碼,同時發現一些問題.
--//我的計算如下:
v1=$(echo -e -n "$sql_text" | md5sum | sed 's/ -//' | xxd -r -p | od -t x4 | sed -n -e 's/^0\+ //' -e 's/ //gp' | tr 'a-z' 'A-Z')
1.問題1:
--//別人問的問題,為什麼使用md5sum後,還有許多步驟,實際上計算出來的結果還要4個位元組對調一下,才是正確的full_hash_value.
--//對調我使用xxd -r -p | od -t x4完成.
--//我估計與CPU型別有關,INTEL系列的這樣計算沒有問題,其它都沒有環境,無法測試.
2.問題2:
--// md5sum後的過濾 sed 's/ -//'是多餘的.
--//cygwin下執行:
$ echo -e -n a | md5sum
0cc175b9c0f1b6a831c399e269772661 *-
--//linux下執行:
$ echo -e -n a | md5sum
0cc175b9c0f1b6a831c399e269772661 -
--//與linux的對比多出了一個*.
$ echo -e -n a | md5sum | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020
--//如果你仔細檢查發現轉換結果是對的.很明顯*-字元被xxd -r -p 給忽略了.
$ echo -n 0cc175b9c0f1b6a831c399e269772661 | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020
$ echo -n 0cc175b9c0f1b6a831c399e269772661a | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020
$ echo -n 0cc175b9c0f1b6a831c399e269772661az | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020
$ echo -n 0cc175b9c0f1b6a831c399e269772661ab | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020 000000ab
0000021
$ echo -n 0cc175b9c0f1b6a831c399e269772661AC | xxd -r -p | od -t x4
0000000 b975c10c a8b6f1c0 e299c331 61267769
0000020 000000ac
0000021
--//注意看輸出,我在結尾增加a,az,ab.可以發現單個字元a結果不變,加入ab,輸出結果發生變化.
--//結尾加入az,與加入a結果一樣,也就是要對齊邊界.
--//可以發現xxd -r -p僅僅接受16進位制字元0-9,a-f,A-F.
--//最佳方式修改如下:
v1=$(echo -e -n "$sql_text" | md5sum | awk "{print $1}" | xxd -r -p | od -t x4 | sed -n -e 's/^0\+ //' -e 's/ //gp' | tr 'a-z' 'A-Z')
$ echo -e -n a | md5sum | awk "{print $1}" | xxd -r -p | od -t x4 | sed -n -e 's/^0\+ //' -e 's/ //gp' | tr 'a-z' 'A-Z'
B975C10CA8B6F1C0E299C33161267769
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2795255/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20211111]補充完善ash_wait_chains指令碼.txtAI指令碼
- [20220317]補充完善TPT 顯示欄位列的指令碼.txt指令碼
- [20220330]編寫sql打補丁的指令碼.txtSQL指令碼
- PS的一些補充
- MybatisPlus的一些補充MyBatis
- KeyShot操作的一些補充
- [20180928]ora-01426(補充).txt
- SQL 的後計算指令碼SQL指令碼
- Python的一些進階補充Python
- Java的一些基礎補充Java
- [20211011]變態的windows批處理9.txtWindows
- [20241016]Oracle C functions annotations補充.txtOracleFunction
- [20220603]測試quiz night(補充).txtUI
- [20211215]提示precompute_subquery補充.txt
- 計算機補碼儲存計算機
- 計算機原碼, 反碼,補碼的介紹計算機
- [20210813]關於測試sql語句子游標的效能的一些補充說明.txtSQL
- [20211011]跟蹤freespace空間的變化情況.txt
- 設計模式學習(一)單例模式補充——指令重排設計模式單例
- [20211116]plsql_code_type=native補充.txtSQL
- Git——關於Git的一些補充(1)Git
- [20220309]查詢x$ksmmem遇到的疑問補充.txt
- [20211221]記錄使用sqlplus的小問題補充.txtSQL
- [計組] 計算機編碼方式:原碼、反碼、補碼計算機
- [20221014]TNS-12543 TNSdestination host unreachable(補充).txt
- [20210803]使用那個shared pool latch(補充).txt
- [20211013]測試遠端監聽補充.txt
- [20211221]提示precompute_subquery補充2.txt
- 深入理解計算機中的原碼、補碼、反碼計算機
- 域名收集姿勢及一些補充
- 計算機為什麼要用補碼計算機
- 補錄資料指令碼指令碼
- [20181128]toad連線資料庫的問題(補充).txt資料庫
- [20190312]關於增量檢查點的疑問(補充).txt
- 計算機二進位制中的原碼,反碼,補碼計算機
- Bash 指令碼程式設計的一些高階用法指令碼程式設計
- [20210506]完善tix指令碼.txt指令碼
- [20201202]完善sosi指令碼.txt指令碼