strcmp函数的使用
关键字:
strcmp函数、人大金仓
1. strcmp函数概述
在MySQL数据库中,比较表的列数据值或者是比较两个元素的值是一项非常基本的操作,此时我们可以用strcmp函数来实现这一功能,strcmp函数的功能是把各种非字符串类型的参数输入进来并且转化为字符串,然后将对应的字符串进行比较,而进行比较的依据就是当前数据库所使用的数据库字符集,类似于常见的UTF8、ASCII、GB2312等都是常用的字符集,其中utf8位默认字符集,而ascii多为英文字符集,gb2312为包含中文的字符集,后面将介绍不同的字符集下中英文比较的差别在什么地方。
2.strcmp函数的语法
strcmp函数可以支持两个参数的输入, 并且还支持输入的值为空值,详细的语法为select strcmp(TYPE_1,TYPE_2)。
如果两个输入的字符串相同,那么表达式返回0,如果参数一大于参数而,那么返回1,如果参数一小于参数二,则返回-1,且常见的字符串的比较大小的依据为常见的ascii码表对应的大小。
例如select strcmp(‘a’,’b’),显然,在ascii表中a<b,所以返回值为-1;
例如select strcmp(‘a’,’a’);
此时,二者相等,所以返回0.
例如select strcmp(‘asd’,’a’);
这里字符串asd与字符串a的首字母一样,那么开始比较后续的部分,但是因为参数二只有一个字符,而第一个参数后续还存在字符,因此,参数一大于参数二,所以返回1.
当插入的数据中包含中文时,不同的字符集的比较规则是各不相同的。
例如当使用的字符集是UTF8或者ascii等英文字符集时,
select strcmp(‘ying’,’英’);
select strcmp(‘英’,’音’);
这里两个表达式执行的结果都是-1,这里使用的字符集为UTF8
将上述语句在GB2312的字符集中再次执行,发现
不同的字符集对于字符的比较可能存在不同的差异,这是因为不同的字符集的编码方式对字符的二进制表示形式也是不一样的,因此就会导致不同的编码方式对应的字符的大小比较顺序也是不一样的。
参考资料
《KingbaseES SQL语言参考手册》




