2012-10-16 99 views
2

是否有一個MySQL內置函數,用反引號圍繞標識符(簡單或合格)?即這樣的功能f會的工作,如:引用帶反引號的標識符的MySQL函數

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

f('my.table')將返回`my`.`table`

f(`my`)將返回`my`

回答

2

通常這是你的數據庫驅動程序的功能,而不是你的數據庫。 MySQL語句解析器使用反引號來正確標記您的語句,因此返回這樣的值的函數將毫無意義,因爲這些將是字符串而不是表或列標記。

您的數據庫驅動程序可能具有用於轉義表名稱的功能,如果有,請使用該功能。否則,你需要以某種方式推出自己的產品。

+0

我沒有使用任何驅動程序。我正在寫一個sql腳本,由mysql客戶端程序運行。反引號是SQL語言的一部分。客戶端可能會也可能不會引用標識符,但我真的不知道MySQL不提供在服務器端執行的功能。 –

+0

我在說這個函數在服務器端沒有用處。如果你在分析之前還沒有定義你的變量,那麼在事實之後,MySQL沒有辦法讓它們理解它們。換句話說,無論你如何工作,SELECT * FROM F('my')'都不是有效的SQL。 – tadman

+0

我明白你的觀點。爲什麼應該在解析器之後調用影響解析器的函數?完全同意。但是,如果您將標識符傳遞給變量,則此類函數「F」仍然有意義。例如。 'SET @ myColumn = F(param); SELECT @myColumn FROM ...'。如果'param'是一個過程參數,並且你不太瞭解它,那麼引用它就非常棘手。 –

0
concat('`',replace(your_identifier,'`','``'),'`') 
相關問題