在我的Lua应用程序中,我正在尝试创建一个设置特定用户数据的实用程序函数。它使用以下格式:setUserData(int UID, string COLUMN_NAME, mixed ROWVALUE)
它将数据保存在MySQL数据库中。
我不确定如何创建列(如果它不存在)并检测值的类型(TEXT,tinyint,VARCHAR等)来设置列。
始终将列设置为TEXT类型会更容易也更好吗?如果没有,我该如何检测和创建?
答案 0 :(得分:1)
这在很大程度上取决于您setUserData
功能的合同。如果您希望用户始终为给定列名提供相同的值类型,则可能始终从中派生列类型的某些方面,特别是它是由字符,整数还是浮点数组成。然后,您可以选择为给定数据选择最大尺寸的列类型,即LONGTEXT
,DOUBLE
或BIGINT
。这样做可能需要数据库中的内存比严格需要的内存更多,但如果您对传递给该函数的数据确实没有任何了解,则不能排除所有空间可能与其他值相关的可能性。同一栏。
另一种方法是始终从给定系列中选择最小数据类型。将新数据插入现有列时,您必须注意截断警告,当您看到它们时,可以相应地放大列类型。
对于许多应用程序,将所有内容存储为字符将是最简单的解决方案。但是LONGTEXT
比TINYINT
之类的简单列类型要复杂得多,因此您必须在内存要求和性能方面付出代价。 VARCHAR
并没有那么糟糕,所以如果你进行上一段中建议的自动放大,那么惩罚就不那么严重了。
当您将所有内容存储为文本时,行为也可能略有不同,独立于LUA中的本机类型:当您输入数字'01234'
时,它将与'1234'
进行比较。这是否可取取决于您的应用程序,并且可能是一个很好的指示是否将数据存储为文本是一个好主意。只要LUA端始终使用相同的数据类型,就不会有任何区别,因为每次都会以相同的方式将相同的数据类型转换为文本。