oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
就個(gè)人而言,我會(huì)使用CHR()來(lái)識(shí)別零值。 nul是ASCII 0, CHR()將返回您傳入的數(shù)字的字符表示。
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || 'c' from dual
5 )
6 select dump(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
DUMP(STR)
----------------------------------------------------
Typ=1 Len=3: 97,0,98
正如您所看到的那樣,通過(guò)連接CHR(0)周圍的百分比符號(hào)CHR(0)相當(dāng)于nul),您可以返回帶有nul的行。
DUMP()返回?cái)?shù)據(jù)類型( 1表示VARCHAR2 )字符串的長(zhǎng)度(以字節(jié)為單位)和數(shù)據(jù)的內(nèi)部表示形式; 默認(rèn)為二進(jìn)制。
但是, 您需要注意多字節(jié)數(shù)據(jù),因?yàn)镃HR()返回的數(shù)字的模數(shù)等于256:
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || chr(256) || 'c' from dual
5 )
6 select dump(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
DUMP(STR)
-------------------------------------------------
Typ=1 Len=3: 97,0,98
Typ=1 Len=4: 97,1,0,99
正如你所看到的,你會(huì)錯(cuò)誤地在這里找到一個(gè)nul,使用CHR()或DUMP()
換句話說(shuō),如果您沒(méi)有多字節(jié)數(shù)據(jù),那么最簡(jiǎn)單的方法就是替換它:
update
set = replace(, chr(0));
使用RAWTOHEX()有類似的問(wèn)題; 雖然你可以找到00但不能保證它實(shí)際上是一個(gè)零點(diǎn):
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || chr(256) || 'c' from dual
5 )
6 select rawtohex(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
RAWTOHEX
--------
610062
61010063
它實(shí)際上還有一個(gè)問(wèn)題; 想象你有兩個(gè)字符10和06 ,返回的值是1006 ,你會(huì)找到00 。 如果您要使用此方法,則必須確保僅從字符串的開(kāi)頭查看兩個(gè)字符組。
由于nul字符的內(nèi)部表示用于表示其他多字節(jié)字符的部分,因此您不能只替換它們,因?yàn)槟恢浪且粋€(gè)字符還是半個(gè)字符。 因此,如果您使用多字節(jié)字符集,據(jù)我所知,您將無(wú)法執(zhí)行此操作。
總結(jié)
以上是生活随笔為你收集整理的oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分享多年收集的40款免费开源源码
- 下一篇: mysql 第几周 时间戳_php时间戳