gpt4 book ai didi

mysql - 使用尾随标记对 DBMS 存储值进行编码以检测截断/损坏;优点?缺点?备择方案?

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:31 25 4
gpt4 key购买 nike

最近,我支持的一个团队遇到了一个问题,他们将一个值存储在 MySQL 数据库中(并从中检索)。他们告诉我他们在 (VARCHAR(255)?) 列中存储一个逗号分隔值。

他们报告说他们的值被悄无声息地截断了(他们的代码主要是 Ruby,一些其他处理是在 Scala 中完成的)并要求我们将该列的大小加倍。

当然,我建议他们规范化...将这些值中的每一个(以前以逗号分隔)存储在单独的行中,并使用 SELECT 来获取集合(以前是单行)。他们反击并坚持认为,他们绝不希望将这些分隔值用于任何其他类型的数据库查询,并且他们永远不需要该字段比新的 (512) 宽度更宽。

然后我建议他们至少添加一个标记其字符串结尾的标记(特别是尾随分号)并在所有提取中检查它。他们已经实现并对此方法感到满意。

我的问题:

  • 他们的数据是如何悄无声息地被截断的? MySQL 或他们的 Ruby 数据库驱动程序中是否有一些设置可以抑制错误?
  • 与更规范化的方法相比,这种标记终止值的优缺点是什么?
  • 这个标记终止值是否有某种艺术术语或昵称?
  • 什么是解决他们问题的更好方法?

最佳答案

在 MySQL 中“错过”截断实际上很容易,但也很容易让它严厉地通知您而不是试图提供帮助。

来自 MySQL 手册:

If strict SQL mode is not enabled and you assign a value to a CHAR or VARCHAR column that exceeds the column's maximum length, the value is truncated to fit and a warning is generated. For truncation of nonspace characters, you can cause an error to occur (rather than a warning) and suppress insertion of the value by using strict SQL mode. See Section 5.1.6, “Server SQL Modes”.

如手册所示,您可以设置 MySQL 的几种“严格”模式之一,以在这种情况下引发错误(以及许多其他情况,否则会导致静默截断或替换值)。

关于mysql - 使用尾随标记对 DBMS 存储值进行编码以检测截断/损坏;优点?缺点?备择方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com