将BINARY LOWER/UPPER查询转换为CAST

后端开发 2026-07-11

我用这个查询来找出拼错的用户名:

SELECT * FROM import_bk
WHERE
(

bk_name = BINARY LOWER(bk_name) OR
bk_name = BINARY UPPER(bk_name) OR
bk_name REGEXP '[0-9]'

)

但我总是收到一个警告,说BINARY已被弃用,应该改用CAST。

这是正确的答案吗?

bk_name = CAST(UPPER(bk_name) AS BINARY) OR
bk_name = CAST(UPPER(bk_name) AS BINARY) OR

解决方案

是的。官方文档对这点说得很清楚:

BINARY运算符已被弃用;你应该预期它将在未来版本的MySQL中被移除。请改用CAST(... AS BINARY)。 ... 将字符串表达式转换为二进制字符串,以下写法等价:

CONVERT(expr USING BINARY) CAST(expr AS BINARY) BINARY expr

备选方案

是的,BINARY自 2021年起就已弃用。请使用CAST作为当前标准(CAST (... AS BINARY))。

SELECT * 
    FROM import_bk
WHERE
    (
        bk_name = CAST(LOWER(bk_name) AS BINARY) OR
        bk_name = CAST(UPPER(bk_name) AS BINARY) OR
        bk_name REGEXP '[0-9]'
    )
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章