在ColdFusion 10中使用CF_SQL_NVARCHAR的详细信息是什么?
关于更新数据库的ColdFusion 10文档有一个部分在
Database-related enhancements in ColdFusion 10.该页面提到现在支持CF_SQL_NVARCHAR等,但没有关于它们的细节.此外,cfqueryparam documentation尚未更新以包含其存在.
ColdFusion 9 documentation for cfqueryparam提到CF_SQL_VARCHAR映射到MSSQL中的varchar.这是真的,除非ColdFusion Administrator datasource settings启用了字符串格式设置.在这种情况下,CF_SQL_VARCHAR映射到nvarchar.这个记录不良的功能是可以在ColdFusion中的cause performance issues的黑客攻击. 所以很好,他们介绍了CF_SQL_NVARCHAR,但很好理解它是如何工作的.它只是一个CF_SQL_VARCHAR的别名,使它毫无意义?它总是发送字符串为nvarchar吗?如果是这样,CF_SQL_VARCHAR是否始终在varchar中发送? 我希望为了实现向下兼容,这样实现: 如果启用了字符串格式CF_SQL_VARCHAR和CF_SQL_NVARCHAR都映射到nvarchar. 如果字符串格式被禁用,CF_SQL_VARCHAR映射到varchar和CF_SQL_NVARCHAR映射到nvarchar. 这意味着CF10之前的任何CF10现场可以移动到CF10,并且在CF10之前具有相同的性能考虑. 新建站点或重新编写所有查询以匹配CF_SQL_VARCHAR和CF_SQL_NVARCHAR与数据库设计的站点不会获得CF10之前不可避免的性能损失. 任何人都可以确认是否是这种情况;更好的,如果有东西官方? 解决方法当你正在等待更多官方的东西时,我会抛出我的$0.02 …我做了一些挖掘,并根据我的观察(使用MS SQL数据源)我相信: > CF_SQL_NVARCHAR不仅仅是CF_SQL_VARCHAR的别名.它映射到较新的NVARCHAR jdbc type,它允许您在更细粒度的级别处理unicode值. CF_SQL_NVARCHAR测试/结果: 如果启用数据源日志记录,则可以在使用CF_SQL_NVARCHAR时看到驱动程序调用特殊的 // Query SELECT ID FROM Test WHERE NVarcharColumn = <cfqueryparam value="#form.value#" cfsqltype="cf_sql_nvarchar"> // Log spy(...)>> PreparedStatement[9].setNString(int parameterIndex,String value) // Profiler exec sp_prepexec @p1 output,N'@P1 nvarchar(4000)',N'SELECT ID FROM Test WHERE NVarcharColumn = @P1 ',N'Стоял он,дум великих полн' CF_SQL_VARCHAR测试/结果: 在CF_SQL_VARCHAR的情况下,它在技术上被标记为varchar.但是,String Format设置最终会控制数据库的处理方式.当设置被启用时,它被处理为nvarchar.当它被禁用时,它被视为varchar.同样,您可以使用SQL Profiler进行验证. 底线,到目前为止,我看到的一切都表明你是正确的关于实施的目标. // Query SELECT ID FROM Test WHERE PlainVarcharColumn = <cfqueryparam value="#form.value#" cfsqltype="cf_sql_varchar"> // Log spy(..)>> PreparedStatement[8].setObject(int parameterIndex,Object x,int targetSqlType) spy(..)>> parameterIndex = 1 spy(..)>> x = ????? ??,??? ??????? ???? spy(..)>> targetSqlType = 12 (ie CF_SQL_VARCHAR) // Profiler (Setting ENABLED) exec sp_prepexec @p1 output,N'SELECT ID FROM Test WHERE PlainVarcharColumn = @P1 ',дум великих полн' // Profiler (Setting DIS-abled) exec sp_prepexec @p1 output,N'@P1 varchar(8000)','????? ??,??? ??????? ????' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |