MariaDb 不支持 ANY_VALUE() 函数-替代办法
mysql5.7及以上有个函数为ANY_VALUE(),具体什么作用可以自己百度了解
有一个问题是MariaDb 并不支持这个函数导致同样的项目部署到MariaDb服务器上报错现在我们使用自定义函数来再MariaDb替代它,具体实现如下
DELIMITER //
CREATE AGGREGATE FUNCTION ANY_VALUE (x LONGBLOB) RETURNS LONGBLOB
BEGIN
LOOP
FETCH GROUP NEXT ROW;
RETURN x;
END LOOP;
END //
DELIMITER ;
记住我们在执行之前要开启mysql允许自定义函数
#查看自定义函数开启状态 --mysql里执行
SHOW variables like '%fun%';
如果是off的话
set global log_bin_trust_function_creators = 1;
然后执行就可以了,但是最坑的是中文用LONGBLOB乱码 所以有中文场景应该用text这个数据类型
DELIMITER //
CREATE AGGREGATE FUNCTION ANY_VALUE (x TEXT) RETURNS TEXT
BEGIN
LOOP
FETCH GROUP NEXT ROW;
RETURN x;
END LOOP;
END //
DELIMITER ;
webman框架数据库配置中strict=>false(非严格模式,启用groupby)
'mysql' => [
'driver' => getenv('DB_DRIVER') ?: 'mysql',
'host' => getenv('DB_HOST') ?: '127.0.0.1',
'port' => getenv('DB_PORT') ?: 3306,
'database' => getenv('DB_DATABASE') ?: 'webman',
'username' => getenv('DB_USERNAME') ?: 'root',
'password' => getenv('DB_PASSWORD') ?: '',
'unix_socket' => getenv('DB_UNIX_SOCKET') ?: '',
'charset' => getenv('DB_CHARSET') ?: 'utf8mb4',
'collation' => getenv('DB_COLLATION') ?: 'utf8mb4_bin',
'prefix' => getenv('DB_PREFIX') ?: '',
'strict' => getenv('DB_STRICT') ?: true,
'engine' => getenv('DB_ENGINE') ?: null,
],
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。