mysql.connector.errors.DataError:140622001:数据对于列而言太长

问题描述

我在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,pdf,gravity) VALUES (%s,%s,%s)"
     mycursor = mydb.cursor()
     val = (name,blob,gravity,)
     mycursor.execute(sqlQuery,val)
     mydb.commit()
     mycursor.close()
     mydb.close()

控制台说:

MysqL.connector.errors.DataError:1406(22001):第1行的列'pdf'的数据太长

我已经在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数据类型的大小限制为2 16 个字节。 LONGBLOB数据类型最多可以包含2 32 个字节,因此将列类型从BLOB更改为LONGBLOB

docs中查看字符串类型的存储要求。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...