2010-07-02 13 views
21

मेरे पास एक फ़ील्डनाम 'उत्पाद' के साथ एक MySQL तालिका में एक तालिका है, और इसे 'डीएस-उत्पाद' में बदलना है।क्या तालिका फ़ील्ड में हाइफ़न हो सकता है?

मैं जिस सीएमएस प्रकार प्रणाली का उपयोग कर रहा हूं वह फॉर्म फ़ील्ड के आईडी को तालिका फ़ील्ड के नाम के रूप में उपयोग करने के लिए उपयोग करता है।

अधिकांश के लिए यह ठीक काम करता है, लेकिन किसी विशेष क्षेत्र के लिए यह 'डीएस-' को जो भी आईडी मैं देता हूं, उसे प्रस्तुत करता है, इसलिए मुझे टेबल फ़ील्ड नाम मिलान करना होगा।

हालांकि, जब एक प्रश्न करने का प्रयास कर रहा है कि त्रुटि

अज्ञात स्तंभ 'फ़ील्ड सूची' में 'sales.ds'

वहाँ किसी भी तरह से मैं एक क्षेत्र कहा जाता डी एस-उत्पाद हो सकता है मिल ?

+9

यह संभव है, लेकिन आप ऐसा नहीं करना चाहते हैं क्योंकि आपको अपने डेटाबेस * के लिए उचित उद्धरण चरित्र में उस तालिका का नाम संलग्न करना होगा * हर बार *। क्या आपने इसके बजाय अंडरस्कोर का उपयोग करने पर विचार किया है? – Charles

+0

@ चार्ल्स: आपकी टिप्पणी का जवाब होना चाहिए –

+0

@ चार्ल्स: +1, गैर-मानक कॉलम नाम आपके द्वारा अभी बताए गए कारणों का अंतिम उपाय होना चाहिए। –

उत्तर

30

अगर आप सीमांकित पहचानकर्ता का उपयोग हाँ, आप विराम चिह्न, सफेद स्थान, अंतर्राष्ट्रीय वर्ण, और SQL आरक्षित शब्दों का प्रयोग कर सकते हैं:

SELECT * FROM `my-table`; 

MySQL में, बैक-टिक का उपयोग करें। मानक एसक्यूएल में, डबल-कोट्स का उपयोग करें।

या आप सेट कर सकते हैं यदि आप MySQL का उपयोग ANSI_QUOTES SQL mode:

SET SQL_MODE = ANSI_QUOTES; 
SELECT * FROM "my-table"; 
+0

मुझे वास्तव में उस क्वेरी तक पहुंच नहीं है जिसका उपयोग किया जाता है। क्या डीएस-उत्पाद नामक फ़ील्ड रखने का कोई तरीका है और क्या इसे मानक क्वेरी में उपयोग किया जाता है? – Jacob

+4

नहीं, हाइफ़न एक ऑपरेटर है, और आप इसे पहचानकर्ता के बीच में उपयोग नहीं कर सकते हैं। क्या होगा यदि आपके पास कॉलम 'डीएस' और 'उत्पाद' भी था? फिर 'डीएस-उत्पाद' एक अंकगणितीय अभिव्यक्ति होगी: एक कॉलम अन्य कॉलम से कम है। एसक्यूएल सीमित पहचानकर्ताओं का समर्थन करता है ताकि आप इस अस्पष्टता को हल कर सकें। एफडब्ल्यूआईडब्ल्यू, मुझे कोई अन्य प्रोग्रामिंग भाषा नहीं पता है जो इसे बिल्कुल अनुमति देगी! –

+0

ऐ, धन्यवाद बिल। – Jacob

4

मेज पर अपने कॉल के अंतिम भाग पर कोष्ठक डालने की कोशिश करो। आपके मामले में:

SELECT * FROM [TABLE-NAME]; 

बस केवल तालिका नाम पर ब्रैकेट डालना सुनिश्चित करें। पूरे डेटाबेस पर यह

SELECT * FROM some_database.anotherdatabase.[your-table]; 

पीएस स्थित है कॉलम पर भी काम करता है।

मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर प्रबंधन का उपयोग कर रहा हूं।

+2

अलास, एमएस एसक्यूएल और माईएसक्यूएल अलग हैं, और अक्सर अलग-अलग उत्तरों की आवश्यकता होती है। आप उन्हें मिश्रण नहीं कर सकते हैं। डाउनवॉट्स का एक गुच्छा पाने से पहले मैं इस जवाब को हटाने की सलाह दूंगा। –

संबंधित मुद्दे