MySQL中创建CRC32的checksum包装函数报错,求排查方案
问题根源与解决方案
核心问题是checksum是MySQL的保留关键字,虽然创建函数时MySQL允许使用保留字(但会产生警告,你创建时已经提示1 warning),但调用时如果不做特殊处理,MySQL会优先将其解析为保留关键字,从而触发语法错误。
解决方法
方法1:修改函数名(推荐)
将函数名改为非保留关键字,比如my_checksum:
CREATE FUNCTION my_checksum(x TEXT) RETURNS BIGINT DETERMINISTIC RETURN crc32(x); -- 调用验证 SELECT my_checksum('foobar');
方法2:用反引号包裹函数名
如果一定要使用checksum作为函数名,创建和调用时都需要用反引号`包裹函数名:
CREATE FUNCTION `checksum`(x TEXT) RETURNS BIGINT DETERMINISTIC RETURN crc32(x); -- 调用验证 SELECT `checksum`('foobar');
验证结果
两种方法都能正常返回crc32('foobar')的结果2666930069。
内容的提问来源于stack exchange,提问作者Aristide
相关产品推荐
相关产品推荐

