【问题标题】:Check if String is Valid MySQL UTF8?检查字符串是否是有效的 MySQL UTF8?
【发布时间】:2015-09-09 00:50:27
【问题描述】:

我有一个编码为 utf8 的 MySQL 列。那个 utf8 实际上并不是完整的 utf8 集,而是only BMP characters only up to 3 bytes in length。我不想尝试将 utf8 插入 MySQL 却发现它不符合 MySQL 的 utf8 参数。有没有办法在尝试插入之前在 Python 中测试某些东西是否符合 MySQL 的参数?由于显而易见的原因,在some_string.encode('utf-8') 上捕获异常不够严格。

【问题讨论】:

    标签: python mysql unicode utf-8


    【解决方案1】:
    >>> len(u'\uffff'.encode('utf8')) < 4 # Good; fits in utf8
    True
    >>> len(u'\U00010000'.encode('utf8')) < 4 # Bad; utf8mb4 only
    False
    >>> ord(u'\uffff') < 65536 # Good; fits in utf8
    True
    >>> ord(u'\U00010000') < 65536 # Bad; utf8mb4 only
    False
    

    【讨论】:

      【解决方案2】:

      要检查字符串是否包含 U+FFFF 以上的 Unicode 字符(因此不能使用“utf8”编码存储在 MySQL 表中),可以使用以下正则表达式:

      re.match(u"[^\u0000-\uffff]", s)
      

      或者,如果您可以升级到 MySQL 5.5 或更高版本,您可能需要考虑将您的表转换为 the utf8mb4 character set,它可以存储所有 Unicode 字符。

      【讨论】:

      • 你应该使用 re.search 而不是 re.match,因为当你尝试 re.match("[^\u0000-\uffff]", "yura?") 它返回 None!但是 re.search("[^\u0000-\uffff]", "yura?") 找到这个
      猜你喜欢
      • 2013-02-13
      • 2019-05-05
      • 2019-10-04
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多