MySQL 8中camelCase转大写SNAKE_CASE结果异常,求解决
解决MySQL 8.0中将camelCase转换为大写SNAKE_CASE的问题
你的问题出在MySQL正则表达式的反向引用语法上:PostgreSQL用\1表示第一个捕获组,但MySQL的REGEXP_REPLACE函数需要用$1来引用捕获组的内容,你用\1会被当成普通字符处理,而MySQL里\1实际匹配的是ASCII码为1的控制字符,所以才会出现一堆_1的错误结果。
修正后的SQL语句可以简化为:
SELECT UPPER(REGEXP_REPLACE('thisIsTheVar', '([A-Z])', '_$1'));
如果要严格确保首字母不会被添加下划线(适配首字母为小写的驼峰命名),也可以保留你原有的拆分逻辑,仅替换反向引用符号:
SELECT UPPER(CONCAT(SUBSTRING('thisIsTheVar', 1, 1), REGEXP_REPLACE(SUBSTRING('thisIsTheVar', 2), '([A-Z])', '_$1')));
执行后就能得到正确的THIS_IS_THE_VAR结果。
额外说明:MySQL 8.0的REGEXP_REPLACE默认就是全局替换所有匹配项,不需要额外添加'g'参数,这和PostgreSQL的regexp_replace行为存在差异。
内容的提问来源于stack exchange,提问作者dfd0226
相关产品推荐
相关产品推荐

