[英]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.