更新時(shí)間:2022-03-30 09:24:19 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2275次
1.包含中文字符
select * from 表名 where 列名 like '%[吖-座]%'
2.包含英文字符
select * from 表名 where 列名 like '%[a-z]%'
3.包含純數(shù)字
select * from 表名 where 列名 like '%[0-9]%'
上面的正則表達(dá)式,只能用like選出該字段中含有中文/英文/數(shù)字的人,那如果需求是選出姓名全部是中文的人,要如何做?
可將字段名強(qiáng)制類型轉(zhuǎn)換成為varchar類型,根據(jù)db中長(zhǎng)度,賦予強(qiáng)制類型一定的長(zhǎng)度,注意千萬(wàn)不要太小,導(dǎo)致刪除了部分字符,英文、數(shù)字、符號(hào)轉(zhuǎn)為字符后,len和datalength長(zhǎng)度一致中文,len的2倍=datalength長(zhǎng)度

char定義存儲(chǔ)字符,實(shí)際存儲(chǔ)也是按照字符形式存儲(chǔ),大小char(255個(gè)字符),注意不是字節(jié)。
在此說(shuō)下字符與字節(jié)的區(qū)別?
字節(jié)是計(jì)算機(jī)中存儲(chǔ)信息的單位,一個(gè)字節(jié)占八位,字符是A、B、C等以及一些符號(hào),一般在計(jì)算機(jī)中用一個(gè)字節(jié)表示,也就是說(shuō)一般占一個(gè)字節(jié),但還有不一般,根據(jù)特定編碼每個(gè)字符所占的字節(jié)數(shù)不同,就如在gbk,gb2312中一個(gè)漢字占兩個(gè)字節(jié),但國(guó)際通用編碼格式utf-8中一個(gè)漢字占3個(gè)字節(jié)。
因此char在utf8編碼下最多可存儲(chǔ)255*3個(gè)字節(jié)的數(shù)據(jù),無(wú)論是單獨(dú)的一個(gè)漢字,還是英文字母都是一個(gè)字符,只是所占字節(jié)不同而已,Soga,char(255個(gè)字符),
不管是sqlserver還是MySQL存儲(chǔ),如果存儲(chǔ)的字符沒有255個(gè)會(huì)以英文空格字符的形式填滿。這就是所謂的定長(zhǎng)。
下面說(shuō)說(shuō)varchar(0-65532個(gè)字節(jié))定義的是字符,但是實(shí)際以字節(jié)的形式進(jìn)行存儲(chǔ),最多可以存儲(chǔ)Max(65532)個(gè)字節(jié),因此在utf8編碼形式下最多存儲(chǔ)65532/3-1個(gè)字符,在gbk編碼下,最多存儲(chǔ)65532/2-1,為什么會(huì)減一呢?因?yàn)?a href="/tutorial_mysql/" target="_blank" title="MySQL教程">MySQL的機(jī)制會(huì)留1-3個(gè)字節(jié)來(lái)存儲(chǔ)該字符串的長(zhǎng)度。多了這個(gè)用來(lái)記錄長(zhǎng)度的結(jié)果就可以做到動(dòng)態(tài)變化,而不需要像char那樣用空格填充剩余空間,減少內(nèi)存消耗,但同樣也增加了內(nèi)耗,影響了性能。
舉個(gè)例子:定義了name字段:varchar(60),為其填充數(shù)據(jù)張三,則只占用6個(gè)字節(jié),剩余54個(gè)字節(jié)未被占用,上例如果定義name字段為char(60),同樣填充數(shù)據(jù)張三的話,雖然也是占用6個(gè)字節(jié),但剩余58個(gè)字符會(huì)用空格填充,實(shí)際占用60個(gè)字符所耗空間。
先說(shuō)說(shuō)nvarchar和varcahr的區(qū)別:
varchar: 可變長(zhǎng)度,存儲(chǔ)ANSI字符,根據(jù)數(shù)據(jù)長(zhǎng)度自動(dòng)變化。
nvarchar: 可變長(zhǎng)度,存儲(chǔ)Unicode字符,根據(jù)數(shù)據(jù)長(zhǎng)度自動(dòng)變化。
varchar[(n)]:長(zhǎng)度為 n 個(gè)字節(jié)的可變長(zhǎng)度且非 Unicode的字符數(shù)據(jù)。n 必須是一個(gè)介于 1 和 8,000之間的數(shù)值。存儲(chǔ)大小為輸入數(shù)據(jù)的字節(jié)的實(shí)際長(zhǎng)度,而不是 n 個(gè)字節(jié)
nvarchar(n) :包含 n個(gè)字符的可變長(zhǎng)度 Unicode 字符數(shù)據(jù)。n 的值必須介于1與4,000 之間。字節(jié)的存儲(chǔ)大小是所輸入字符個(gè)數(shù)的兩倍。
從以上可以看出nvarchar是以字符方式存儲(chǔ), 因?yàn)橛肬nicode編碼,因此可以說(shuō)是規(guī)定nvarchar是雙字節(jié)存儲(chǔ),不管你存儲(chǔ)的是漢字還是英文字母都是占兩個(gè)字節(jié)。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)