The ColdFusion 10 documentation on Updating Your Database has a section on Database-related enhancements in ColdFusion 10. That page mentions that there is now support for CF_SQL_NVARCHAR
among others, but with no details about them. Additionally, the cfqueryparam documentation hasn't been updated to include their existence.
The ColdFusion 9 documentation for cfqueryparam mentions that CF_SQL_VARCHAR
maps to varchar
in MSSQL. This is true unless the ColdFusion Administrator datasource settings has the String Format
setting enabled. In which case CF_SQL_VARCHAR
maps to nvarchar
. This poorly documented feature is a hack which can cause performance issues within ColdFusion.
So it's great that they have introduced CF_SQL_NVARCHAR
, but it would be good to understand how it works. It is simply an alias for CF_SQL_VARCHAR
making it pointless? Does it always send strings as nvarchar
? If so, does CF_SQL_VARCHAR
always send in varchar
?
I would hope that for backward compatibility's sake it is implemented as such:
If String Format
is enabled CF_SQL_VARCHAR
and CF_SQL_NVARCHAR
both map to nvarchar
.
If String Format
is disabled then CF_SQL_VARCHAR
maps to varchar
and CF_SQL_NVARCHAR
maps to nvarchar
.
This would mean any pre-CF10 sites can move to CF10 and work, with the same performance considerations pre-CF10.
New sites, or sites that rewrite all queries to match CF_SQL_VARCHAR
and CF_SQL_NVARCHAR
with the database design will not get the performance penalty that is unavoidable pre-CF10.
Can anyone confirm if this is the case; even better if with something official?