MySQL函数引用带有反勾号的标识符

MySQL函数引用带有反勾号的标识符,mysql,sql,Mysql,Sql,是否有一个MySQL内置函数,用反勾号包围标识符(简单或限定)?也就是说,这种功能f的工作原理如下: f('my')将返回'my` f('my.table')将返回'my`.'table`,并且 f(`my`)将返回`my`通常这是数据库驱动程序的函数,而不是数据库。MySQL语句解析器使用反标记来正确标记语句,因此返回这样的值的函数将毫无意义,因为这些值是字符串,而不是表或列标记 您的数据库驱动程序可能具有转义表名的功能,如果是,请使用该功能。否则你就得自己开车了。我没有使用任何驱动程序。我正

是否有一个MySQL内置函数,用反勾号包围标识符(简单或限定)?也就是说,这种功能
f
的工作原理如下:

f('my')
将返回
'my`

f('my.table')
将返回
'my`.'table`
,并且


f(`my`)
将返回
`my`

通常这是数据库驱动程序的函数,而不是数据库。MySQL语句解析器使用反标记来正确标记语句,因此返回这样的值的函数将毫无意义,因为这些值是字符串,而不是表或列标记


您的数据库驱动程序可能具有转义表名的功能,如果是,请使用该功能。否则你就得自己开车了。

我没有使用任何驱动程序。我正在编写一个sql脚本,由mysql客户端程序运行。反勾号是SQL语言的一部分。客户端可以引用标识符,也可以不引用标识符,但我真的很奇怪MySQL没有提供这样一个在服务器端执行的函数。我是说这个函数在服务器端没有任何用途。如果在解析之前没有对变量进行分隔,MySQL就无法在解析之后理解它们。换句话说,
SELECT*FROM F('my')
是无效的SQL,无论您如何操作它。我明白您的意思。为什么要在解析器之后调用影响解析器的函数?完全同意。但是,如果在变量中传递标识符,则此类函数
F
仍然有意义。例如,
SET@myColumn=F(参数);从…中选择@myColumn
。如果
param
是一个过程参数,而您对它了解不多,那么引用它是很困难的。问题是
SELECT@myColumn
选择的是字符串值,而不是列本身。换句话说,
SELECT`x`FROM`y`
不同于
SET@x=`x`
然后
SELECT@x`y`
。在后一种情况下,每行重复一次
`x`
。这与
从'y`
中选择'x``相同。好的,我们已经深入到了问题的核心。考虑这一点:<代码> SET@ x=“KEY”;设置@q=CONCAT('SELECT',@x',从表中选择');从@q处制备stmt。如果
没有反勾号,则在准备语句时会出现错误。正如我所说,“
key
”作为参数传递。
concat('`',replace(your_identifier,'`','``'),'`')