0

我在使用ColdFusion 2016的Azure中使用数据库。我正在使用Sqljdbc41.jar(关于如何配置它的有用链接:link1link2)这是我的查询。 [uuid]有一个索引,它是varchar(36),pkIdentity是一个主键int。cfqueryparam在SQL Azure中将varchar转换为nvarchar

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

此查询消耗了Azure中最多的DTU。 ColdFusion不把它发送到Azure中为

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

我读过的JDBC驱动程序的设置可能会casting the varchar datatype as varchar它传递到SQL Azure的时候。但是,我没有在CF数据库设置屏幕中禁用转换为nvarchar的选项。

我认为这些是我的选择。你认为哪一个更好?

  1. 尝试反向工程当您使用 cfqueryparam但指定正确的数据类型是什么ColdFusion的是做(用sp_prepexec?)
  2. 删除使用cfqueryparam的全部,只是 验证字符串是有效的UUID之前硬编码它到查询 (例如[uuid] ='#attributes.uuid#'),但是恐怕我会失去可见性,将此查询的所有执行视为在Azure SQL Performance Insight工具中分组在一起
+0

您是如何确定您的关于ColdFusion如何发送参数的声明的? –

+0

从这个答案 - https://stackoverflow.com/questions/10802388/what-are-the-details-for-using-cf-sql-nvarchar-in-coldfusion-10/10848136#10848136 – jessieloo

+1

你相信转换到nvarchar降低查询速度? 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' –

回答

0

非常感谢@BernhardDöblerfor comm使用我需要的参数来纠正数据源总是以Unicode编码参数的问题。需要添加到JDBC URL的参数是sendStringParametersAsUnicode = false(具有讽刺意味的是,我首先从他的评论中复制了它并将其添加到设置中,但它没有工作,因为在几个字母之间嵌入了一些奇怪的字符。) DTU消耗量的变化现在显着降低!见下面的截图。 DTU consumption Performance Insight