0

J'utilise une base de données dans Azure avec ColdFusion 2016. J'utilise Sqljdbc41.jar de (liens utiles sur la façon de le configurer: link1link2) Ceci est ma requête. [uuid] a un index sur elle et est varchar (36) et pkIdentity est une clé primaire int.cfqueryparam conversion varchar nvarchar en bleu azur sql

select pkIdentity 
from tbl1 
where [uuid] = <cfqueryparam cfsqltype="cf_sql_varchar" value="#attributes.uuid#" maxlength="36"> 

Cette requête consomme le plus d'unités de bureau dans Azure. Coldfusion envoie à Azure

(@P0 nvarchar(4000))select pkIdentity 
from tbl1 
where [uuid]= @P0 

J'ai lu qu'un paramètre sur le pilote JDBC peut être casting the varchar datatype as varchar quand il passe à SQL Azure. Cependant, je n'ai pas l'option dans l'écran de configuration de base de données CF pour désactiver la conversion en nvarchar.

Je pense que ce sont mes options. Lequel préférez-vous?

  1. essayer de désosser ce coldfusion est en train de faire lorsque vous utilisez cfqueryparam mais spécifier le type de données correct (utilisation sp_prepexec?)
  2. utilisation de supprimer des cfqueryparam totalement et simplement valider cette chaîne est valide UUID avant dur coder dans la requête (par exemple où [uuid] = '# attributes.uuid #') mais j'ai peur de perdre la visibilité de toutes les exécutions de cette requête regroupées dans l'outil Azure SQL Performance Insight
+0

Comment avez-vous vérifié votre déclaration sur la manière dont ColdFusion envoie le paramètre? –

+0

de cette réponse - https://stackoverflow.com/questions/10802388/what-are-the-details-for-using-cf-sql-nvarchar-in-coldfusion-10/10848136#10848136 – jessieloo

+1

Croyez-vous que la conversion à nvarchar ralentit la requête? http://www.jochenhebbrecht.be/site/2014-05-01/java/fixing-slow-queries-running-sql-server-using-jpa-hibernate-and-jtds 'jdbc: sqlserver: // localhost \ SQLEXPRESS; DatabaseName = TESTDB; sendStringParametersAsUnicode = false' –

Répondre

0

Un grand merci à @ BernhardDöbler pour la communication Enting avec le paramètre dont j'avais besoin pour corriger le problème de la source de données toujours couler des paramètres en Unicode. Le paramètre qui doit être ajouté à l'URL JDBC est sendStringParametersAsUnicode = false (Ironiquement, je l'ai d'abord copié à partir de son commentaire et l'ai ajouté à l'installation, mais cela n'a pas fonctionné car il y avait des caractères étranges entre deux lettres). La modification de la consommation de DTU est nettement plus faible maintenant! Voir les captures d'écran ci-dessous. DTU consumption Performance Insight