更新時間:2022-03-30 09:24:19 來源:動力節點 瀏覽1942次
1.包含中文字符
select * from 表名 where 列名 like '%[吖-座]%'
2.包含英文字符
select * from 表名 where 列名 like '%[a-z]%'
3.包含純數字
select * from 表名 where 列名 like '%[0-9]%'
上面的正則表達式,只能用like選出該字段中含有中文/英文/數字的人,那如果需求是選出姓名全部是中文的人,要如何做?
可將字段名強制類型轉換成為varchar類型,根據db中長度,賦予強制類型一定的長度,注意千萬不要太小,導致刪除了部分字符,英文、數字、符號轉為字符后,len和datalength長度一致中文,len的2倍=datalength長度
char定義存儲字符,實際存儲也是按照字符形式存儲,大小char(255個字符),注意不是字節。
在此說下字符與字節的區別?
字節是計算機中存儲信息的單位,一個字節占八位,字符是A、B、C等以及一些符號,一般在計算機中用一個字節表示,也就是說一般占一個字節,但還有不一般,根據特定編碼每個字符所占的字節數不同,就如在gbk,gb2312中一個漢字占兩個字節,但國際通用編碼格式utf-8中一個漢字占3個字節。
因此char在utf8編碼下最多可存儲255*3個字節的數據,無論是單獨的一個漢字,還是英文字母都是一個字符,只是所占字節不同而已,Soga,char(255個字符),
不管是sqlserver還是MySQL存儲,如果存儲的字符沒有255個會以英文空格字符的形式填滿。這就是所謂的定長。
下面說說varchar(0-65532個字節)定義的是字符,但是實際以字節的形式進行存儲,最多可以存儲Max(65532)個字節,因此在utf8編碼形式下最多存儲65532/3-1個字符,在gbk編碼下,最多存儲65532/2-1,為什么會減一呢?因為MySQL的機制會留1-3個字節來存儲該字符串的長度。多了這個用來記錄長度的結果就可以做到動態變化,而不需要像char那樣用空格填充剩余空間,減少內存消耗,但同樣也增加了內耗,影響了性能。
舉個例子:定義了name字段:varchar(60),為其填充數據張三,則只占用6個字節,剩余54個字節未被占用,上例如果定義name字段為char(60),同樣填充數據張三的話,雖然也是占用6個字節,但剩余58個字符會用空格填充,實際占用60個字符所耗空間。
先說說nvarchar和varcahr的區別:
varchar: 可變長度,存儲ANSI字符,根據數據長度自動變化。
nvarchar: 可變長度,存儲Unicode字符,根據數據長度自動變化。
varchar[(n)]:長度為 n 個字節的可變長度且非 Unicode的字符數據。n 必須是一個介于 1 和 8,000之間的數值。存儲大小為輸入數據的字節的實際長度,而不是 n 個字節
nvarchar(n) :包含 n個字符的可變長度 Unicode 字符數據。n 的值必須介于1與4,000 之間。字節的存儲大小是所輸入字符個數的兩倍。
從以上可以看出nvarchar是以字符方式存儲, 因為用Unicode編碼,因此可以說是規定nvarchar是雙字節存儲,不管你存儲的是漢字還是英文字母都是占兩個字節。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習