繁体   English   中英

peewee.OperationalError:(3995,“字符集‘utf8mb4_unicode_ci’不能与调用 regexp_like 的‘binary’结合使用。”)

[英]peewee.OperationalError: (3995, "Character set 'utf8mb4_unicode_ci' cannot be used in conjunction with 'binary' in call to regexp_like.")

几个月前我有一个 peewee 查询(针对 mysql 8.0 服务器),现在它给了我以下错误:

peewee.OperationalError: (3995, "Character set 'utf8mb4_unicode_ci' cannot be used in conjunction with 'binary' in call to regexp_like.")

产生错误的代码行是:

words = (Word
         .select(Word.word, Word.points)
         .where(Word.word.regexp('^[aeiou]+$'))
         .order_by(fn.CHAR_LENGTH(Word.word).desc(), Word.word)

a) 我 99% 确定它在几周内有效,b) 我看不到任何我可能已经改变的东西,c) 我很确定解决方案会很简单,但我不能指手画脚.

版本是 peewee==3.15.4 和 Python==3.10.9

.regexp()转换为REGEXP BINARY操作。

在 MySQL 8.0.22 之前,可以将二进制字符串 arguments 与这些函数一起使用,但它们产生的结果不一致。 在 MySQL 8.0.22 及更高版本中,通过 ER_CHARACTER_SET_MISMATCH 拒绝将二进制字符串与任何 MySQL 正则表达式函数一起使用。

因此,您可能应该将其切换为不使用此结构的.iregexp()

Word.word.iregexp('^[aeiou]+$')

如果需要区分大小写,请使用fn.REGEXP_LIKE ,它支持设置区分大小写的标志: https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-like

fn.REGEXP_LIKE(Word.word, '^[aeiou]+$', 'c')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM