python - mysql.connector.errors.DataError : 1406 (22001): Data too long for column

标签 python mysql pdf blob

我在 MySQL 数据库中存储使用 Reportlab 库制作的 PDF 文件时遇到问题。这是我的代码:

def insertIntoDb(pdfFullPath,name,surname,gravity):
  print('PRIMA DEL MYSQL')
  print('pdf full path'+pdfFullPath)
  mydb = mysql.connector.connect(host="localhost", user="root", passwd="", database="deepface")
  with open(pdfFullPath,'rb') as pdfvar:
     blob = pdfvar.read()
     print(blob)
     sqlQuery = "INSERT INTO diagnosi(name,surname,pdf,gravity) VALUES (%s,%s,%s,%s)"
     mycursor = mydb.cursor()
     val = (name,surname,blob,gravity,)
     mycursor.execute(sqlQuery,val)
     mydb.commit()
     mycursor.close()
     mydb.close()

控制台显示:

mysql.connector.errors.DataError: 1406 (22001): Data too long for column 'pdf' at row 1

我已经在 mysql 配置文件中设置了最大允许数据包,但问题是当我尝试打印(我知道我不能)PDF 时,我得到:

^\\7:[,1qq,N_Sd$dm-:XU2/Pga=O1f/`hY7X1nrca).:_\'-4,n*"L5r,CHFpGo:"E,MDLu7EW%CFF0$Rl?jT\'6%k%,?AF%UK6ojt/c$<^Xh=;VarY:L8cQYTgj/:CfA/j1=dbU@a<:%D;rDV[)WDu)5*"98A5kkfYAqs0FFVZk[*Mb(Rs?hIk

还有其他事情,我如何存储在我的数据库中? 我尝试用 b64 解码但不起作用。


> SHOW CREATE TABLE diagnosi;

diagnosi | CREATE TABLE `diagnosi` (
  `tempId` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `surname` varchar(30) NOT NULL,
  `pdf` blob NOT NULL,
  `gravity` varchar(50) NOT NULL,
  PRIMARY KEY (`tempId`)\n) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

最佳答案

MySQL BLOB 数据类型的大小限制为 216 字节。 LONGBLOB 数据类型最多可达 232 字节,因此请将列类型从 BLOB 更改为 LONGBLOB

请参阅 docs 中字符串类型的存储要求.

关于python - mysql.connector.errors.DataError : 1406 (22001): Data too long for column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63452919/

相关文章:

python - 如何避免在 python 中动态分配的字符串中出现转义字符?

python - 粘贴配置中的基本路径

python - 缓存 Python 脚本返回的 mysql 查询

javascript - 具有多个输入的自动完成搜索表单php mysql

java - 图表和自定义字体

python - 在 RGB 图像的 tensorflow 中使用 SSIM 损失函数

python - 使用 python gui 中的按钮从先前选择的外部应用程序复制文本

mysql - 如何在一个查询中进行分组依据和排序依据?

pdf - 将多页 PDF 转换为 PNG 并返回 (Linux)

pdf - 如何为时间戳签名启用 LTV?