根据行来检测列的类型

在我的 Lua 应用程序中,我正在尝试创建一个设置特定用户数据的实用函数。它使用以下格式:setUserData(int UID, string COLUMN_NAME, mixed ROWVALUE)它将数据保存在 MySQL 数据库中。

我不确定如何创建列(如果不存在)并检测值的类型(TEXT、tinyint、VARCHAR 等),以设置列。

是否将列始终设置为 TEXT 类型会更容易、更好?如果不是,我该如何检测并创建?

点赞
用户1468366
用户1468366

这在很大程度上取决于你的 setUserData 函数的约定。如果你期望用户始终为给定的列名提供相同的值类型,那么你可能总是可以从中派生出该列类型的某些方面,特别是它是否由字符、整数或浮点数组成。然后,你可以选择为给定数据选择 最大大小 的列类型,即 LONGTEXTDOUBLEBIGINT。这样做可能需要比在数据库中严格必需的内存更多,但如果你实际上对传递给该函数的数据什么都不知道,那么你无法排除在同一列中所有的空间可能都被其他值使用的可能性。

另一种方法是始终从给定族中选择 最小 的数据类型。当把新数据插入 现有 列时,你必须留意截断警告,并在看到这些警告时相应地扩大列类型。

对于许多应用程序来说,把一切存储为字符将是最简单的解决方案。但是,LONGTEXT 比像 TINYINT 这样的简单列类型要复杂得多,所以你将不得不在内存需求和性能方面付出代价。VARCHAR不是那么糟糕,因此如果你按照上一段建议的自动扩大,惩罚会较轻。

独立于 LUA 中的本地类型,将所有东西存储为文本时,行为也可能略有不同:当你将一个数字输入为 '01234' 时,它将与 '1234' 不相等。这是否理想取决于你的应用程序,并且可能是是否将数据存储为文本的一个良好指示。只要 LUA 端始终使用相同的数据类型,那么不应该有任何区别,因为每次相同的数据类型都会以相同的方式转换为文本。

2012-07-24 11:14:36