2017-02-07 13 views
0

私は、SQL Serverに変換しようとしていますmysqlのこのmysqlは正しくsql serverに変換されていますか?

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `email` varchar(249) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `password` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL, 
    `username` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
    `verified` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `registered` int(10) unsigned NOT NULL, 
    `last_login` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `email` (`email`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

のために、これを持っている:

CREATE TABLE users(
id int PRIMARY KEY IDENTITY NOT NULL, 
email varchar(255) UNIQUE, 
password varchar(255) NOT NULL , 
username varchar(100) DEFAULT NULL, 
verified tinyint NOT NULL DEFAULT '0', 
registered int NOT NULL, 
last_login int DEFAULT NULL, 
); 

働いたが、私はいくつかのもの、主にCollatecharacter setを省略しなければなりませんでした。あまりにも重要なことを忘れていて、mysqlからSQL Serverにそれらのものを翻訳する方法を教えていただけますか?

答えて

4

いくつかの注意:

  • PRIMARY KEYNOT NULLを意味します。
  • 定数は変数と同じ型にする必要があります。
  • 一般化された文字セットについては、NVARCHAR()を使用してください。
  • DEFAULT NULLは冗長です(ご希望の場合はです)。したがって

:また

CREATE TABLE users (
    id int PRIMARY KEY IDENTITY, 
    email nvarchar(255) UNIQUE, 
    password nvarchar(255) NOT NULL , 
    username nvarchar(100), 
    verified tinyint NOT NULL DEFAULT 0, 
    registered int NOT NULL, 
    last_login int 
); 
+0

:VARCHAR(255) ''またはNVARCHAR(255) 'として保存されているパスワード'ある**非常に**疑わしいです。暗号化ハッシュのみをDBに格納するため、パスワードは正しく固定されたバイナリ値_です。あなたがbase64でデータをエンコードしても、サイズと文字セットが分かっているので、 'varchar'、' nvarchar'、または 'nchar'の代わりに' char'を使います。 –

+0

php auth library https://github.com/delight-im/PHP-Authこれは、パスワードが100文字を超えていない限り、パスワードは固定サイズまたは最大サイズでなければならないと述べています。 (同じことを話しているとは思わない) –

+1

@DougCassidy新しいNISTパスワードガイドラインでは、パスワードの最大長を64文字に設定できます。しかし、それはちょっと無関係です。パスワード自体は固定サイズであってはなりません。それらを平らなテキストに保存しないので、固定サイズであることを確実に保存する方法。オリジナルの暗号化ハッシュ関数を使用すると、入力に使用するものと同じサイズの出力が生成されます。 –

関連する問題