1:使用ASCIISTR函数判别
ASCIISTR函数说明:
ASCIISTR返回字符的ASCII形式的字符串。非ASCII的字符被转化为‘\xxxx’的形式。(xxxx为中文的ascii码)
使用ASCIISTR函数也是根据非ASCII字符会被转化这个特性来判别中文字符,只要里面包含中文字符,则必定会有\xxx这样的字符。且简体汉字的编码范围是B0A1 - F7FE.
所以使用ASCIISTR函数来判断列中否有中文数据,只需要判断ASCIISTR(COLUMN_NAME)中是否有‘\’符号,(注意要与数据本身就有\的区分开);
2:使用CONVERT函数判别
CONVERT函数说明:
CONVERT(inputstring,dest_charset,source_charset)
inputstring:要转换的字符串
dest_charset:目标字符集
source_charset:原字符集
SELECT SNAME FROM TEST WHERE SNAME <> CONVERT(SNAME,'ZHS16GBK','AL32UTF8');
3:使用函数length和lengthb来判别
使用函数length与lengthb来判别,是基于中文字符占用2~4个字节,而ASCII字符占用一个字节,那么对比LENGTH与LENGTHB就会不一样。这样就能判别字段中是否包含中文字符,但是跟ASCIISTR一样,如果里面的非ASCI字符包含非中文,它一样不能判别。依然有取巧嫌疑。
SELECT SNAME FROM TEST WHERE LENGTH(SNAME) != LENGTHB(SNAME);