sql查询字段是中⽂英⽂数字正则表达式⼀、包含中⽂字符
select * from 表名 where 列名 like '%[吖-座]%'
⼆、包含英⽂字符
select * from 表名 where 列名 like '%[a-z]%'
三、包含纯数字
select * from 表名 where 列名 like '%[0-9]%'
上⾯的正则表达式,只能⽤like选出该字段中含有中⽂/英⽂/数字的⼈,那如果需求是选出姓名全部是中⽂的⼈,要如何做?
sqlserver中有函数len,以及datalength
可将字段名强制类型转换成为varchar类型,根据db中长度,赋予强制类型⼀定的长度,注意千万不要太⼩,导致删除了部分字符
英⽂数字符号转为字符后,len和datalength长度⼀致
中⽂,len的2倍=datalength长度
MySQL:
char定义存储字符,实际存储也是按照字符形式存储,⼤⼩char(255个字符),注意不是字节。
在此说下字符与字节的区别?
中文字符unicode查询字节是计算机中存储信息的单位,⼀个字节占⼋位,字符是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个字符所耗空间
sqlserver:
先说说nvarchar和varcahr的区别:
varchar:可变长度,存储ANSI字符,根据数据长度⾃动变化。
nvarchar:可变长度,存储Unicode字符,根据数据长度⾃动变化。
varchar[(n)]:长度为 n 个字节的可变长度且⾮ Unicode的字符数据。n 必须是⼀个介于 1 和 8,000之间的数值。存储⼤⼩为输⼊数据的字节的实际长度,⽽不是 n 个字节
nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于1与4,000 之间。字节的存储⼤⼩是所输⼊字符个数的两倍。
因此可以说是规定nvarchar是双字节存储,不管你存储的是汉字还是英⽂字母都是占两个字节,
分析优缺点:
优点:判断字符串的时候可以不需要考虑中英⽂两种字符的差别,可以避免程序中乱码的问题。
缺点:存储英⽂字符会增⼤⼀倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的,效率没有varchar⾼。
char在此不做多解释与MySQL情况⼀致。
⼀般使⽤情况说明:
存储的数据长度确定如电话号码,编码等固定的,⽽且不包中⽂的,可以选择char类型。
存储的数据长度不确定,存储只有英⽂、数字的最好⽤varchar
存储的数据长度不确定,也有可能有中⽂,可以选择nvarchar类型。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。