एसक्यूएल स्तंभ नाम केस संवेदी जब तक उद्धृत कर रहे हैं, मानक का कहना है कि पहचानकर्ता अपर केस लेकिन PostgreSQL normalizes to lower case को सामान्य बनाया जाना चाहिए:
Quoting an identifier also makes it case-sensitive, whereas unquoted names are always folded to lower case. For example, the identifiers FOO
, foo
, and "foo"
are considered the same by PostgreSQL, but "Foo"
and "FOO"
are different from these three and each other. (The folding of unquoted names to lower case in PostgreSQL is incompatible with the SQL standard, which says that unquoted names should be folded to upper case. Thus, foo
should be equivalent to "FOO"
not "foo"
according to the standard. If you want to write portable applications you are advised to always quote a particular name or never quote it.)
आप अपने एसक्यूएल में Email
संदर्भित कर रहे हैं:
SELECT "bans".* FROM "bans" WHERE (Email='' ...
लेकिन PostgreSQL email
के बारे में शिकायत कर रहा है:
column "email" does not exist
आपके unquoted Email
को email
के रूप में माना जा रहा है क्योंकि PostgreSQL पहचानकर्ता को कम मामले में सामान्यीकृत करता है। ऐसा लगता है कि आप डबल उन्हें उद्धृत करके पूंजीकृत नाम के साथ कॉलम बनाया:
create table "bans" (
"Email" varchar(...)
...
)
या :Email
का उपयोग कर एक प्रवास में स्तंभ की पहचान करने के द्वारा। आप जब यह बनाई गई है एक स्तंभ नाम बोली है, तो यह नहीं सामान्यीकृत लोअर केस (या SQL मानक मामले में अपर केस) करने के लिए है और आप इसे बोली को दोगुना करने की है और मामले को हमेशा के लिए की भरपाई करेंगे:
SELECT "bans".* FROM "bans" WHERE ("Email"='' ...
एक बार जब आप Email
को ठीक कर लेंगे, तो आपको IP
, Username
, Reason
, और Length
के साथ एक ही समस्या होगी: आपको उन सभी को संदर्भित करने वाले किसी भी SQL में उन्हें उद्धृत करना होगा।
सबसे अच्छा अभ्यास निम्न केस कॉलम और टेबल नामों का उपयोग करना है ताकि आपको हर समय चीजों को उद्धृत करने की चिंता न हो। मैं अनुशंसा करता हूं कि आप अपनी तालिका को कम केस कॉलम नाम रखने के लिए ठीक करें।
एक अलग रूप में के रूप में, अपने 'NULL'
स्ट्रिंग शाब्दिक:
SELECT "bans".* FROM "bans" WHERE (Email='' AND IP='' AND (Username='NULL'))
-- -------------------->------------------>---------->---------------^^^^^^
अजीब लग रहा है, तो आप यकीन है कि आप "Username" is null
मतलब नहीं कर रहे हैं? 'NULL'
स्ट्रिंग शाब्दिक और नल मान पूरी तरह से अलग-अलग चीजें हैं और आप NULL के विरुद्ध चीजों की तुलना करने के लिए =
या !=
का उपयोग नहीं कर सकते हैं, जब आप NULLs खेल सकते हैं तो आपको is null
, is not null
, is distinct from
, or is not distinct from
(अपने इरादे के आधार पर) का उपयोग करना होगा।
क्या आप केस-संवेदनशील कॉलम नामों के साथ पोस्टग्रेस का उपयोग कर रहे हैं? –
केस एसक्यूएल और तालिका – nekosune
हम्म में ठीक है, हाँ, मुझे लगता है कि यह एक ही स्थान पर है, हालांकि कॉलम यह कहता है कि गायब है। –