ほとんどの主キーと他のフィールドもchar(n)を使用して、パディング付きの数値を格納するデータベースを使用するように求められました。次に例を示します。
product_id: char(8) [00005677]
user_id: char(6) [000043]
category_id: char(2) [05]
彼らがそのようにそれを使いたい理由は、彼らが望むなら(遠い将来に)キャラクターを使うことができるようにするためです。ただし、番号に基づく多くのルールがあります。たとえば、01から79までのcategory_idは一般的なカテゴリに対応し、80から89までは特別なカテゴリであり、90から99まではユーザー定義のカテゴリです。
個人的には、char(n)を使用して数値を格納することは悪い習慣だと思います。私の理由は次のとおりです。
- char、 ""!= 0、0!= 00、05!= 5、00043!=00043などを使用します。そのため、(データの破損を防ぐために)値を常にチェックする必要があります。
- 数字を埋める場合:0-> 00、文字を埋めないように注意する必要があります(A-> 0A)
- 文字を使用すると、範囲が奇妙になります。たとえば、01から79、ABとRX、TZとSなどです。
- 文字の代わりに数値にインデックスを付けると、パフォーマンスが向上します
この情報はさまざまなソース(Web、Windowsクライアント、アップロードcsv)によって変更されるため、ゼロフィルを使用してdecimal(n)に変更し、より「エラー防止」にすることを提案しています。たとえば、カテゴリをさらに追加したい場合は、decimal(2)からdecimal(3)への更新が簡単になります。
私の質問は次のとおりです。私は間違っていますか?char(n)はこのタスクで信頼できますか?「chars」が数字で邪悪な場合、上記のリストに欠けている他の欠点はどれですか(私の場合に勝ちたい場合は、より良い理由が必要になる可能性があります)?
TIA(コメント/回答をいただければ幸いです)。