क्या कॉलम नाम से बचने के लिए SQL मानक है? यदि नहीं, तो MySQL और SQLite के लिए क्या काम करता है? यह SQL सर्वर के लिए भी काम करता है?
जवाबों:
"एसक्यूएल: 1999 मानक निर्दिष्ट करता है कि दोहरे उद्धरण ( ") ( उद्धरण चिह्न ) परिसीमित पहचानकर्ता किया जाता है।
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL और SQlite सभी "पहचानकर्ता परिसीमनक के रूप में समर्थन करते हैं ।
वे सभी "'डिफ़ॉल्ट' के रूप में उपयोग नहीं करते हैं । उदाहरण के लिए, आपको ANSI मोड में MySQL चलाना होगा और SQL सर्वर केवल तब ही इसका समर्थन करता QUOTED_IDENTIFIERहै ON।
SQLite के अनुसार ,
'foo' एक SQL स्ट्रिंग है"foo" SQL पहचानकर्ता (स्तंभ / तालिका / आदि) है[foo] MS SQL में एक पहचानकर्ता है`foo` MySQL में एक पहचानकर्ता हैयोग्य नामों के लिए, वाक्यविन्यास है: "t"."foo"या [t].[foo], आदि।
ANSI_QUOTESविकल्प सक्षम होने पर MySQL मानक "फू" का समर्थन करता है।
WHERE "nonexistent_column" = 0और sqlite ने खुशी से इसे दिखावा करते हुए निष्पादित किया कि मेरी "nonexistent_column"एक स्ट्रिंग थी। पूरी तरह से नाम को क्वालिफाई करने के रूप "my_table"."nonexistent_column"में और अधिक सख्ती से व्यवहार करने में sqlite को मजबूर करता है ।
foo, "foo"और 'foo'MySQL के साथ मेरे लिए काम नहीं किया। इसमें बैकटिक्स की आवश्यकता थी। और मामले को बदतर बनाने के लिए, MySQL बेकार त्रुटि संदेश प्रदान कर रहा था ।
MySQL के लिए, वापस टिक का उपयोग करें `।
उदाहरण के लिए:
SELECT `column`, `column2` FROM `table`
MS SQL उपयोग के लिए [और]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
DBASE / DBF उपयोग के लिए [और]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
कुछ उत्तरों को एक साथ रखना:
MS SQL (aka T-SQL), Microsoft Access SQL, DBASE / DBF: SELECT [COLUMN], [COLUMN2] FROM [TABLE]
माई एसक्यूएल: SELECT `COLUMN`, `COLUMN2` FROM `TABLE`
SQLite, Oracle, Postgresql: SELECT "COLUMN", "COLUMN2" FROM "TABLE"
कृपया जोड़ें / संपादित करें!
'foo'यदि संदर्भ एक स्ट्रिंग की अनुमति नहीं देगा, तो SQLite एक पहचानकर्ता के रूप में व्याख्या करने की अनुमति देता है, और"foo"यदि संदर्भ पहचानकर्ता को अनुमति नहीं देता है, तो स्ट्रिंग के रूप में व्याख्या की जा सकती है, हालांकि यह नोट है कि यह व्यवहार भविष्य में हटाया जा सकता है संस्करणों।