我需要你的帮助,这让我发疯。
我需要将 Python SHA 哈希插入到 BINARY 列中,并且无法通过mysql.connector.errors.DatabaseError: 1300: Invalid utf8mb4 character string: 'E9A834'错误。
我在用着:
- 蟒蛇 3.8.5
- mysql-connector-python==8.0.25
- MySQL 8.0.24 'MySQL 社区服务器 - GPL'
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' 在某处被转换为常规字符串,但是......我在这里做错了什么,有什么办法吗?