
MySQL AES_DECRYPT špatně řadí diakritiku
Ahoj, navazuju na můj předchozí dotaz (2745852-ktery-mysql-dotaz-je-lepsi)
Mám mysql tabulku kde pomocí aes_encrypt ukládám data uživatelů a pomocí aes_decrypt data zase vytahuju, ale s hrůzou jsem teď zjistil, že když mám například takto uloženo příjmení a vypisuju seznam uživatelů, tak mi to podle toho příjmení blbě řadí - písmenka s diakritikou jsou až na konci
řadím to takto: ORDER BY AES_DECRYPT(SURNAME, SHA2(muj_tajny_kod)) ASC
Co s tím - potřebuju to opravit... Díky moc za pomoc...
Nastav si správně collation:
https://dev.mysql.com/doc/refman/5.7/en/charset-collate.html
ahoj, díky za odpověď... DB už má utf8_czech_ci
Když to dám přímo za ten order tak dostanu tuto chybu
Edit: pole je typu varbinary
Tak to ještě zkus přecastovat:
https://stackoverflow.com/questions/16556375/how-to-use-aes-encrypt-and-aes-decrypt-in-mysql
Ahoj, tak vypadá to že to funguje - ale musí se to udělat takto:
Na začátku SQL dotazu dát
A pak v order by takto:
pozri si vypis z prikazu:
EXPLAIN nazov_tabulky;
jedna vec je, ze si collation nastavil databaze, ale tabulky, ktore uz su vytvorene maju collation na kazdom stlpci typu char, varchar, ... a tam bude asi este ta nespravna.
Tie treba tiez explicitne zmenit cez ALTER TABLE a modify.
Tabulka i všechny textové sloupce mají nastaveno utf8_czech_ci, ale encodovaný sloupce podle kterých i řadím, to nastavené mít nemohou, protože jsou typu varbinary