Control whether the symbolic SQL syntax uses the N syntax for non-ASCII SQL string literals.
The variable *use-n-syntax-for-non-ascii-strings*
controls whether SQL string literals containing non-ASCII characters are put into SQL expressions with the N syntax. When *use-n-syntax-for-non-ascii-strings*
is nil
(the default), all string literals are produced without the N syntax. When *use-n-syntax-for-non-ascii-strings*
is non-nil, non-ASCII string literals are produced with the N syntax.
A non-ASCII string is any string that contains character codes out of the ASCII range 0 to 127.
(sql:sql-operation '= [name] "hhh<Greek>")
=>
#<SQL-RELATIONAL-EXP "(NAME = 'hhh<Greek>')">
(let ((sql:*use-n-syntax-for-non-ascii-strings* t))
(sql:sql-operation '= [name] "hh<Greek>"))
=>
#<SQL-RELATIONAL-EXP "(NAME = N'hh<Greek>')">
For the symbolic SQL "[...]" syntax , the effect of *use-n-syntax-for-non-ascii-strings*
occurs at macro expansion time. Therefore, if you use the symbolic SQL syntax and want to make of use *use-n-syntax-for-non-ascii-strings*
, then you need to set it before compiling your code.
See SQL string literals for details.
Microsoft SQL Server is currently the only SQL backend that requires the N syntax.
*use-n-syntax-for-non-ascii-strings*
does not affect what sql-expression with :string
does.
LispWorks User Guide and Reference Manual - 20 Sep 2017