根据行检测列的类型

时间:2012-07-24 10:54:46

标签: mysql lua

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

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

始终将列设置为TEXT类型会更容易也更好吗?如果没有,我该如何检测和创建?

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于您setUserData功能的合同。如果您希望用户始终为给定列名提供相同的值类型,则可能始终从中派生列类型的某些方面,特别是它是由字符,整数还是浮点数组成。然后,您可以选择为给定数据选择最大尺寸的列类型,即LONGTEXTDOUBLEBIGINT。这样做可能需要数据库中的内存比严格需要的内存更多,但如果您对传递给该函数的数据确实没有任何了解,则不能排除所有空间可能与其他值相关的可能性。同一栏。

另一种方法是始终从给定系列中选择最小数据类型。将新数据插入现有列时,您必须注意截断警告,当您看到它们时,可以相应地放大列类型。

对于许多应用程序,将所有内容存储为字符将是最简单的解决方案。但是LONGTEXTTINYINT之类的简单列类型要复杂得多,因此您必须在内存要求和性能方面付出代价。 VARCHAR并没有那么糟糕,所以如果你进行上一段中建议的自动放大,那么惩罚就不那么严重了。

当您将所有内容存储为文本时,行为也可能略有不同,独立于LUA中的本机类型:当您输入数字'01234'时,它将与'1234'进行比较。这是否可取取决于您的应用程序,并且可能是一个很好的指示是否将数据存储为文本是一个好主意。只要LUA端始终使用相同的数据类型,就不会有任何区别,因为每次都会以相同的方式将相同的数据类型转换为文本。