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