mysql.connector/Python 插入 BINARY 列时出现“无效的 utf8mb4 字符串”

问题描述

我需要你的帮助,这让我发疯。

我需要将 Python SHA 哈希值插入到 BINARY 列中,但我无法通过 MysqL.connector.errors.DatabaseError: 1300: Invalid utf8mb4 string: 'E9A834' 错误

我正在使用:

  tagscad = ' '.join(sorted([cad.lower() for cad in curcripto['tags']]))
  idtags = hashlib.sha256(tagscad.encode('utf-8')).digest()

  try:
    cursor.execute("insert into histotags "
                    "(hashix,tags) values (%s,%s)",(idtags,tagscad))

  except MysqL.connector.errors.IntegrityError as err:
    print(f"tags: {tagscad}")
    raise
  except MysqL.connector.errors.DatabaseError as err:
    print(f"tags: {tagscad}")
    raise

我的表架构

CREATE TABLE `histotags` (
  `hashix` binary(32) NOT NULL,`verifix` binary(32) GENERATED ALWAYS AS (unhex(sha2(`tags`,256))) STORED,`tags` varchar(2048) CHaraCTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,PRIMARY KEY (`hashix`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

我还尝试使用 MysqL 8.0.24 的​​认表排序规则 utf8mb4_0900_ai_ci 并使用 raw=True 实例化游标对象,错误是相同的:它抱怨插入无效的 utf8mb4 字符串(idtags 是 ab 前缀以 E9 A8 34 序列开头的字符串)到二进制列 hashix。在我看来,b'string' 在某处被转换为常规字符串,但是……我在这里做错了什么,有什么办法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)