最近、私がサポートしているチームが、MySQL データベースに保存 (および取得) する値で問題に遭遇しました。彼らは、カンマ区切りの値を (VARCHAR(255)?) 列に格納していたと言っています。
彼らは、値が暗黙のうちに切り捨てられていることを報告し (コードはほとんどが Ruby で、その他の処理は Scala で行われています)、その列のサイズを 2 倍にするように依頼しました。
当然のことながら、正規化することを提案しました...これらの値 (以前はカンマ区切り) をそれぞれ別の行に格納し、SELECT を使用してセット (以前は単一の行でした) をフェッチします。彼らは反対し、他の種類のデータベースクエリに対してこれらの分離された値を決して望んでおらず、フィールドを新しい (512) 幅よりも広くする必要は決してないと主張しました.
次に、少なくとも文字列の終わりを示す番兵 (特に末尾のセミコロン) を追加し、すべてのフェッチでそれをチェックすることを提案しました。彼らはそれを実装しており、このアプローチに満足しています。
私の質問:
- 彼らのデータはどのようにして静かに切り捨てられたのでしょうか? エラーを抑制している MySQL または Ruby の DB ドライバーに設定はありますか?
- このセンチネルで終了した値と、より正規化されたアプローチの長所と短所は何ですか?
- このセンチネル終了値の専門用語またはニックネームはありますか?
- 彼らの問題に対処するためのより良い方法は何でしょうか?