1

「顧客」テーブルがあります:

CREATE TABLE Customer
(
    ID INTEGER NOT NULL DEFAULT 0,
    Username CHAR(50) NOT NULL,
    Password CHAR(100) NOT NULL,
    LastName CHAR(20) NOT NULL,
    PhoneNumber BIGINT NOT NULL,
    MobileNumber BIGINT NOT NULL,
    PRIMARY KEY (ID)
) 
;

charパスワードタイプに使用しましたが、これでいいですか?そして、私が使用した携帯電話番号についてbigintは、これは正しいですか?そうでない場合はどうすればよいですか?そして、そのためのSQLステートメントは何ですか?ありがとう。

4

3 に答える 3

1

これらのフィールドはすべて可変長であるため、「ユーザー名」、「パスワード」、および「姓」には、CHARではなくVARCHARを使用する必要があります。これらの長さに制限がある場合は、いつでもVARCHARタイプをその制限に制限できます。

'PhoneNumber'と'MobileNumber'については、これらの値を使用して計算を実行しないため、電話番号に最初の文字として0が含まれることが多いことは言うまでもなく、これらの値をVARCHARとして保存しない理由はありません。あらゆる種類のINTとして保存されます。

何かのようなもの:

CREATE TABLE `Customer` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `Username` varchar(255) NOT NULL DEFAULT '',
 `Password` varchar(255) NOT NULL DEFAULT '',
 `LastName` varchar(255) NOT NULL DEFAULT '',
 `PhoneNumber` varchar(100) DEFAULT NULL,
 `MobileNumber` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
于 2013-01-17T13:30:02.183 に答える
0

これらの質問はすべて、あなたが持っている要件に関係します...たとえば、このフィールドに数字だけがある場合に

使用できます。文字も入れられる場合に 使用します。 両方とも、独自の長所と短所があります。 を使用すると、1つの文字列に好きなだけ文字を含めることができます。たとえば、最大30文字を格納でき、文字数が少ない場合は、残りのメモリが自動的にダンプされます。この目的で使用することもできます。渡されたすべての文字を使用し、残りのメモリをダンプして30文字も保存しますが、メモリは処理されません。BIGINTMobileNumber
VARCHAR

VARCHARCHAR
VARCHAR

VARCHAR(30)VARCHAR(max)
CHAR(30)

小さなプログラムではメモリは問題にならないかもしれませんが、プログラムが巨大な場合は大きな影響を与える可能性があります。

于 2013-01-17T13:19:04.160 に答える
0

パスワードには、バイト1の配列を使用し、パスワードの一方向ハッシュを格納します。ユーザーが入力したパスワードを確認するときが来たら、それをハッシュして、保存されているハッシュと比較します。

さらに、ソルティングを使用し、(理想的には)認証インフラストラクチャ全体をファイアウォールと明確に定義されたAPIを超えて独自のサーバーに分離する必要があります。

関連する回答:


1 RAW Oracle、byteaPostgreSQL、varbinaryMS SQL Server、BLOBMySQLなど。

于 2013-01-17T15:50:51.250 に答える