首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据溢出到另一列

数据溢出到另一列
EN

Stack Overflow用户
提问于 2021-05-27 06:21:13
回答 1查看 25关注 0票数 0

我正在尝试在我的Discord机器人中使用sqlalchlemy来记录员工和我们的用户之间的对话。

大多数情况下,事情都会被记录下来,但最近开始在向表中插入数据时遇到一些问题。

我们使用sqlalchemy插入到数据库中。我不是专家,所以可能创建了一些错误的东西。

下面是表对象:

代码语言:javascript
复制
engine = create_engine("mysql+pymysql://%s:%s@%s/%s" % (db_user, db_pass, db_host, database), echo = True)
    meta = MetaData()

    logs = Table(
        'logs', meta,
        Column('id', Integer, primary_key=True, autoincrement=True, nullable=False),
        Column('agent', VARCHAR(45), nullable=False), 
        Column('starttime', DATETIME, nullable=False),
        Column('endtime', DATETIME, nullable=False),
        Column('osid', VARCHAR(20), nullable=True),
        Column('nickname', VARCHAR(45), nullable=False),
        Column('discorduid', VARCHAR(30), nullable=False),
        Column('log', String(99999999999999999999999999999999999999), nullable=False),
        Column('tags', VARCHAR(45), nullable=True)
    )

    insert = logs.insert()
    insert = logs.insert().values(agent=agent, starttime=start, endtime=end, osid='', nickname=user, discorduid=uid, log=messages, tags=tags)
    connection = engine.connect()
    result = connection.execute(insert)

以下是数据库中表的相关信息:

代码语言:javascript
复制
MariaDB [discord]> describe logs;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| agent      | varchar(45) | NO   |     | NULL    |                |
| starttime  | datetime    | NO   |     | NULL    |                |
| endtime    | datetime    | NO   |     | NULL    |                |
| osid       | varchar(20) | YES  |     | NULL    |                |
| nickname   | varchar(45) | NO   |     | NULL    |                |
| discorduid | varchar(30) | NO   |     | NULL    |                |
| log        | longtext    | NO   |     | NULL    |                |
| tags       | varchar(45) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

我收到的错误似乎显示通过insert = logs.insert().values(agent=agent, starttime=start, endtime=end, osid='', nickname=user, discorduid=uid, log=messages, tags=tags)的日志log=messages列溢出到我下面的tags列中,并编辑了一些数据:

代码语言:javascript
复制
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: DataError: (pymysql.err.DataError) (1406, "Data too long for column 'tags' at row 1")
[SQL: INSERT INTO logs (agent, starttime, endtime, osid, nickname, discorduid, log, tags) VALUES (%(agent)s, %(starttime)s, %(endtime)s, %(osid)s, %(nickname)s, %(discorduid)s, %(log)s, %(tags)s)]
[parameters: {'agent': 'X', 'starttime': datetime.datetime(2021, 5, 26, 19, 50, 55, 863000), 'endtime': datetime.datetime(2021, 5, 26, 20, 39, 56, 392000), 'osid': '', 'nickname': 'X', 'discorduid': 'X', 'log': 'OffSec Ninja:\nHello X - this chat has been initiated by X so that we can better assist you.\n\nX:\nHi X how are yo ... (5500 characters truncated) ... com/attachments/847200149520515102/847212337203380234/somefile.PNG\n\n\X:\nthe last buffer is the one that I\'m changing from 5092 to 5098\n\n', 'tags': "last buffer is the one that I'm changing from 5092 to 5098"}]

当支持代理关闭专用1对1通道时,将填充tags列。

我检查了我要插入的messages数据的长度,结果是5462。

这是否是mysql的一个限制,以及它可以在一行中存储多少空间?或者我只是搞砸了我的桌子对象?

EN

回答 1

Stack Overflow用户

发布于 2021-05-27 06:57:44

之所以会出现这个错误,是因为SQL试图将"last buffer is The one,I'm changing from 5092 to 5098“(一个58个字符的字符串)插入到VARCHAR(45)中。太长了。

我从来没有听说过MySQL允许文本内容在列之间溢出。它就是不会这么做。因此,一定是Python变量messagestags包含您在错误中看到的文本,然后您的代码才会尝试将它们插入到表中。按照设置Python变量的方式进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67713420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档