普通自定义函数与
UDF
函数区别
问题现象
普通自定义函数与
UDF
函数区别。
解决方法
普通自定义函数通过“
select * from gbase.proc\G
”查看,普通自定义函数属于
特定的数据库。
普通自定义函数在创建、删除时,必须指定数据库,不然会报错。
udf
函数通过“
select * from gbase.func\G
”查看,
udf
函数相当于全局函数。
udf
函数创建、删除时,指定或不指定数据库都行。
case_when
不区分大小写
问题现象
GBase 8a MPP Cluster FAQ FAQ
文档版本(2021-04-02) 南大通用数据技术股份有限公司
84
gbase> select * from t ;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | A |
+------+------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> select id, name, case when name = 'a' then 'lower' else 'upper'
end from t where name = 'a';
+------+------+------------------------------------------------------+
| id | name | case when name = 'a' then 'lower' else 'upper' end |
+------+------+------------------------------------------------------+
| 1 | a | lower |
+------+------+------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select id, name, case when name = 'a' then 'lower' else 'upper'
end from t where name = 'A';
+------+------+------------------------------------------------------+
| id | name | case when name = 'a' then 'lower' else 'upper' end |
+------+------+------------------------------------------------------+
| 2 | A | lower |
+------+------+------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
解决方法:
一、对于老表
1、可以删除,重建,加上 collate utf8_bin 如: create table ** default
character set utf8 collate utf8_bin
2、增加 binary 关键字改写。如: select case binary b where ......
二、对于要新建的表
1、修改集群层和节点层的配置文件, collation-server=utf8_bin
2、建表时加上 collate utf8_bin 如:
create table ** default character set
utf collate utf8_bin
注:同样的情况不仅会出现在 case when 中,只要是出现在 select 字段后的投
影列涉及到字符串比较的问题都会有因为字符集原因导致的字符串比较问题。参考
mySql 数据库对于字符串比较的处理方式,目前 8a 的处理方式合理,不需要进行修
改,若用户需要对大小写敏感,请指定字符集或者加入关键字 binary 即可达到效
果。