-1

私のLuaアプリケーションでは、特定のユーザーデータを設定するユーティリティ関数を作成しようとしています。この形式を使用しsetUserData(int UID, string COLUMN_NAME, mixed ROWVALUE) ます。MySQLデータベースにデータを保存します。

列を作成する方法(存在しない場合)と、列を設定するための値のタイプ(TEXT、tinyint、VARCHARなど)を検出する方法がわかりません。

列を常にTEXTタイプとして設定する方が簡単で良いでしょうか?そうでない場合、どうすれば検出して作成できますか?

4

1 に答える 1

1

それはあなたの機能の契約に大きく依存しますsetUserData。ユーザーが特定の列名に常に同じ値型を提供することを期待する場合、特に文字、整数、または浮動小数点数で構成されているかどうかにかかわらず、列型のいくつかの側面を常にそこから導き出すことができます。次に、指定されたデータの最大サイズの列タイプ、つまり、、LONGTEXTまたはDOUBLEを選択できますBIGINT。そうすることで、データベースに厳密に必要な量よりも多くのメモリが必要になる場合がありますが、その関数に渡されるデータについて実際に何もわからない場合は、そのすべてのスペースが他の値のために必要になる可能性を排除することはできません。同じ列。

別のアプローチは、特定のファミリから常に最小のデータ型を選択することです。既存の列に新しいデータを挿入するときは、切り捨ての警告に注意する必要があります。警告が表示されたら、それに応じて列の種類を拡大できます。

多くのアプリケーションでは、すべてを文字として保存するのが最も簡単な解決策になります。ただし、aLONGTEXTは、のような単純な列タイプよりもはるかに複雑であるTINYINTため、メモリ要件とパフォーマンスの両方の観点から支払う必要があります。AVARCHARはそれほど悪くないので、前の段落で提案した自動拡大を行うと、ペナルティはそれほど厳しくなりません。

LUAのネイティブタイプとは関係なく、すべてをテキストとして保存する場合の動作もわずかに異なる場合があります。数値をとして入力すると'01234'、とは等しくなりません'1234'。これが望ましいかどうかはアプリケーションによって異なり、データをテキストとして保存することをお勧めします。LUA側が常に同じデータ型を使用する限り、同じデータ型が毎回同じ方法でテキストに変換されるため、違いはありません。

于 2012-07-24T11:14:36.167 に答える