【发布时间】:2011-01-21 15:16:45
【问题描述】:
正如预期的那样,我在输入一些未包含在我的数据库排序规则中的字符时出现错误:
(1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='")
我可以使用任何函数来确保字符串仅包含我的数据库排序规则中存在的字符吗?
谢谢
【问题讨论】:
正如预期的那样,我在输入一些未包含在我的数据库排序规则中的字符时出现错误:
(1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='")
我可以使用任何函数来确保字符串仅包含我的数据库排序规则中存在的字符吗?
谢谢
【问题讨论】:
我会看看 Python 的 unicode.translate() 和 codec.encode() 函数。这两种方法都可以更优雅地处理非法输入字符,并且 IIRC,translate() 已被证明比类似用例的正则表达式更快(应该很容易在谷歌上搜索结果)。
来自 Python 的文档:
"对于 Unicode 对象, translate() 方法不接受可选的 deletechars 参数。相反,它返回 s 的副本,其中所有字符都已通过给定的转换表映射,该转换表必须是 Unicode 序数到“
【讨论】:
您可以使用正则表达式来只允许某些字符。以下仅允许字母、数字和 _(下划线),但您可以更改以包含任何您想要的内容:
import re
exp = '^[A-Za-z0-9_]+$'
re.match(exp, my_string)
如果返回一个对象,则找到匹配项,如果没有返回值,则为无效字符串。
【讨论】: