SQL Server : Générer un hash MD5 en Transact-SQL identique au hash MD5 MySQL

Comme indiqué dans mon billet précédent, je travaille actuellement sur une migration de base de données de MySQL vers SQL Server. Ce billet est un mémo personnel (donc, un peu rédigé à la va-vite) mais qui sait... il pourrait vous être utile. ^^

SQL Server et MySQL ne retournent pas le même résultat lors d'un hash MD5 :

Différence entre hash MD5 SQL Server et MySQL
SQL Server MySQL
 HASHBYTES('MD5', 'Test')   MD5('Test') 
 0x0CBC6611F5540BD0809A388DC95A615B   0cbc6611f5540bd0809a388dc95a615b 

 

Comme vous pouvez le constater, les résultats ne sont pas tout à fait identiques. Si vous souhaitez obtenir un hash MD5 en Transact-SQL rigoureusement identique à un hash MySQL, la commande à saisir est :

CONVERT(NVARCHAR(32),HASHBYTES('MD5', cast('Test' as varchar)),2)

 

Pour les versions antérieures à SQL Server 2008, la fonction CONVERT() est inopérante. Préférez :

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',cast('Test' as varchar))),3,32)

 

Et le tour est joué ^^

PS : j'avoue ne pas avoir le temps de détailler la commande. Si vous souhaitez de plus amples explications, n'hésitez pas à me contacter. :)

Php - SQL Server : SQLSTATE[IMSSP]: An error occurred translating string for input param 1 to UCS-2

Actuellement, je travaille sur une migration de SGBD. En effet, je vais passer d'un environnement MySQL à un environnement Microsoft SQL Server. D'un point de vue PHP, si la surcouche PDO (pour info, j'utilise l'ORM idiorm) facilite grandement la migration, je tombe parfois sur des erreurs qui me laissent pantois.

Pas plus tard qu'aujourd’hui, en testant l’insertion d’un enregistrement contenant des caractères spéciaux (ex. Raphaël) via formulaire, je me suis retrouvé face à cette erreur :

Erreur : SQLSTATE[IMSSP]: An error occurred translating string for input param 1 to UCS-2: Il n’y a pas de caractère correspondant au caractère Unicode dans la page de codes multi-octet cible.

 

Le problème semble provenir de l’encodage UTF-8 qui est mal pris en compte par le driver sqlsrv. Après de longues heures à parcourir les forums, wikis et autres joyeusetés, j’ai enfin trouvé la solution.

En fait, il suffit simplement d’ajouter (avant le script de connexion au serveur SQL Server) :

mb_internal_encoding( 'UTF-8' );

 

Et le tour est joué ! ^^

 

Netbeans : masquer les TODOs des composants externes

Je travaille actuellement sur un projet dans lequel j'utilise pas mal de composants externes (ex. Twig, Idiorm, datatables, TWB, etc.). Comme tout développeur, je parsème mon code de diverses annotations, dont les fameux TODO.

Malheureusement, lorsque je souhaite afficher la liste des TODOs de mon projet, je retrouve les miens noyés au milieu des TODOs des composants externes. Et autant vous dire qu'il y en a un paquet !

Netbeans todo list

Plutôt gênant, n'est ce pas ?

 

Après quelques recherches, j'ai enfin trouvé le moyen de créer un filtre pour n'afficher que mes TODOs. Pour ce faire :

Netbeans Action Items Menu

 

Netbeans Action Items Filter

 

Et le tour est joué ^^

Si vous avez d'autres astuces sympathiques pour Netbeans, n'hésitez pas à m'en faire part. :)

Ma logithèque : les indispensables

Comme énoncé dans un de mes précédents billets, j'ai procédé il y a peu à la réinstallation de Windows sur mon Yoga. Je vous propose aujourd'hui un petit tour d'horizon des logiciels composants ma logithèque de base.

Le premier logiciel que j'installe est bien entendu LE navigateur : Firefox !

Ensuite, je passe à l'installation des divers outils composants mon environnement de développement.

Type Sous Windows Sous GNU/Linux
Environnement de développement
  Serveur local Apache (MySQL Php) WampServer LAMP
  Emulateur de Terminal Cmder Yakuake (si KDE)
  Git MySysGit git
  Git dans explorateur de fichiers TortoiseGit RabbitVCS
  Dépendances PHP composer
  IDE Netbeans
  Outil MySQL MySQL Workbench
  Client FTP Filezilla
  BDD sécurisée de mots de passe Keepass

 

Développer, c'est bien, mais il me faut également divers logiciels nécessaires aux travaux "bureautiques".

Type Sous Windows Sous GNU/Linux
Bureautique
  Suite bureautique Microsoft Office LibreOffice
  Prise de notes OneNote -
  Finances personnelles BankPerfect -
  Gestion des archives 7zip -
  Captures d'écran GreenShot Shutter
  Traitement d'images Gimp (+ Paint.net sous Windows)
  Lecteur audio (travail en musique ^^) Clementine

 

Tous ces outils me sont indispensables que ce soit d'un point de vue professionnel ou personnel. Bien entendu, il s'agit là d'une base. Ma logithèque s'étoffe ensuite au fur et à mesure de mes besoins mais globalement, ce sont là les logiciels que j'utilise le plus au quotidien.

Mes extensions Firefox #5 : Empty Cache Button

Suite de la série de billets dédiées aux extensions Firefox que j’utilise quotidiennement. Après µBlock, Ghostery, Close All Tabs et Colorzilla, je vous propose aujourd’hui de découvrir l’extension Empty Cache Button : simple, pratique et efficace !

Lorsqu'on travaille sur le design d’une page web, la mise en cache des contenus (Images, photos et/ou icônes) peut s’avérer rapidement pénible. Chaque fois que l'on modifie une image, une icône, une photo ou autre, il faut « vider le cache » pour rafraîchir la page et voir le résultat à l’écran.

Pour vider le cache, 3 possibilités :

- la solution contraignante : Menu > Options > Avancé > Réseau > Vider maintenant :

Firefox menu vider cache

 

- la solution semi-contraignante car il faut à chaque fois décocher les cases pour ne garder que « Cache » de coché : Ctrl + Shift + Suppr :

Firefox Ctrl + Shift + Suppr

 

Et puis il y a Empty Cache Button. Un clic sur la petite icône IMG ou un appuie sur la touche F9 : Bouton Empty Cache Button

Empty Cache Button Success

 

Et le tour est joué ^^

Que disais-je ? Ah oui : simple, pratique et efficace. ^^