2016-08-09 3 views
0

In MySQL erwartete ichMySQL durch ein Passwort wählen() kehrt nicht Ergebnis

ausführen
insert into test (id, pw) values(1, password('1234')); 

Ich habe

Query OK, 1 row affected, 1 warning (0.01 sec) 

ich durch ein Passwort, einen Datensatz suchen möchten, so dass ich ausführen

select * from test where pw = password('1234'); 

Ich erwarte, dass es eine Zeile zurückgibt, aber ich bekomme einen leeren Satz. Was habe ich falsch gemacht?

+0

Welche Art von Ausgabe produziert 'PASSWORD()' für Sie? – tadman

+0

Überprüfen Sie hier http://sqlfiddle.com/#!9/656b85/1, scheint gut. – Blank

Antwort

1

Die Funktion MySQL Password() generiert derzeit (ca. 2016) einen nicht binären String mit bis zu 41 Zeichen. Dies ist sichtbar durch entweder ruft

SHOW CREATE TABLE mysql.user; 

und Untersuchen der password Spalte (die einen gehashten Wert enthält):

`Password` char(41) ... 

für, sagen wir, MySQL 5.6 oder durch die gleiche Klartext-Wert Hashing und Futter es an den Ausgang der gleichen SHOW CREATE TABLE auf MySQL 5,7

`authentication_string` text ... 

die Hash-Werte übereinstimmen, jedoch in einem anderen Schema-Layout. Wiederum wird einer in einer VARCHAR(41), der andere in einer TEXT, wie die gleiche mysql_native_password PAM, verwendet. Zur Zeit. Password() wurde ab 5.7.6 veraltet, was bedeutet, dass ein neues Plugin in Arbeit ist. Was sie sein sollten. Sie sind Plugins nach allem.

Was bedeutet das alles? Es bedeutet, dass Ihr Schema eine ausreichend breite Spalte haben muss, um Ihre Verwendung von Password() zu handhaben (Hinweis 5.7 zu TEXT wechseln). Und erinnern Sie sich daran, dass es veraltet ist, also halten Sie Ausschau nach Veränderungen mit MySQL Hashing in den nächsten Jahren.

+0

danke bro !!!!!!! –

+0

das Feld ändern 'varchar (41)' so habe ich Problem gelöst. vielen vielen Dank. –