Est la syntaxe SQL sensible à la casse?
SQL est sensible à la casse. J'ai utilisé MySQL et SQL Server qui semblent tous deux être le cas dans le sensible. Est-ce toujours le cas? La norme de définir la sensibilité à la casse?
Vous devez vous connecter pour publier un commentaire.
Les mots-clés SQL sont insensibles à la casse (
SELECT
,FROM
,WHERE
, etc), mais sont souvent écrites en majuscules. Toutefois, dans certaines configurations, la table et les noms de colonne sont sensibles à la casse. MySQL dispose d'une option de configuration pour activer/la désactiver. Généralement sensibles à la casse de la table et les noms de colonne sont par défaut sur Linux MySQL et insensibles à la casse utilisée par défaut sur Windows, mais maintenant, le programme d'installation interrogé à ce sujet lors de l'installation. Pour MSSQL, c'est une fonction de la base de données du paramètre de classement.Ici est la MySQL page sur le nom de la casse
Ici est la l'article de MSDN sur les classements pour MSSQL
Ce n'est pas à proprement parler le langage SQL, mais dans SQL Server si votre classement de base de données est sensible à la casse, puis tous les noms de table sont sensibles à la casse.
Dans Sql Server c'est une option. Tournant sur suce.
Je ne suis pas sûr à propos de MySql.
Identifiants et mots réservés ne devrait pas être sensible à la casse, bien que beaucoup de suivre une convention pour l'emploi de majuscules pour les mots réservés et Pascal cas pour les identificateurs.
Voir SQL-92 Sec. 5.2
La SQL92 spécification états que les identificateurs peuvent être cotées ou non cotées. Si les deux côtés sont non cotées, alors ils sont toujours insensibles à la casse, par exemple
table_name == TAble_nAmE
.Cependant identificateurs sont sensibles à la casse, par exemple
"table_name" != "TAble_naME"
. Également basé sur la spécification si vous voulez comparer les unqouted identificateurs de prix, alors non cotées et cotées identificateurs peuvent être considérés de la même manière, si le non coté personnages sont en majuscule, par exempleTABLE_NAME == "TABLE_NAME"
, maisTABLE_NAME != "table_name"
ouTABLE_NAME != "TAble_NaMe"
.Voici la partie pertinente de la spec (section 5.2.13):
Noter que, tout comme avec d'autres parties de la norme SQL, pas toutes les bases de données de suivre cette section entièrement. PostgreSQL par exemple les magasins de tous les identificateurs non cotées mis en minuscule au lieu d'en majuscule, donc
table_name == "table_name"
(ce qui est exactement à l'opposé de la norme). Aussi certaines bases de données sont sensibles à la casse de tous les temps, ou à des cas de sensibilité dépend de certains paramètres dans la base de données ou qui sont tributaires de certaines propriétés du système, généralement si le système de fichiers sensible à la casse ou non.Noter que certains outils de base de données peut envoyer des identifiants cité tout le temps, donc dans le cas où vous mélangez les requêtes générées par un outil (comme CRÉER une TABLE de requête générée par Liquibase ou d'autres DB outil de migration), fait à la main requêtes (comme un simple JDBC sélectionnez dans votre application), vous devez vous assurer que les cas sont cohérentes, en particulier sur les bases de données où cotées et non cotées identifiants sont différents (DB2, PostgreSQL, etc.)
Ma compréhension est que la norme SQL appels à l'insensibilité à la casse. Je ne crois pas que les bases de données conformes à la norme complètement, cependant.
MySQL a un paramètre de configuration dans le cadre de son "mode strict" (un grab bag de plusieurs paramètres qui font de MySQL plus conforme aux normes) pour les cas sensibles ou insensibles les noms de table. Indépendamment de ce réglage, les noms de colonnes sont encore insensibles à la casse, même si je pense que cela affecte la façon dont la colonne-les noms sont affichés. Je crois que ce paramètre est à l'instance, à travers toutes les bases de données dans les SGBD exemple, bien que je suis à la recherche aujourd'hui pour confirmer (et en espérant que la réponse est non).
J'aime la façon dont Oracle gère beaucoup mieux. En ligne droite SQL, les identificateurs comme la table et les noms de colonne sont insensibles à la casse. Toutefois, si pour quelque raison vous avez vraiment le désir de s'explicite boîtier, vous pouvez joindre l'identificateur entre guillemets (qui sont tout à fait différents dans Oracle SQL à partir de la seule citations utilisé pour inclure les données de chaîne). Donc:
interroge fieldname de tablename, mais
interroge fieldName de tableName.
Je suis sûr que vous pourriez même utiliser ce mécanisme pour insérer des espaces ou d'autres caractères non standard dans un identificateur.
Dans cette situation, si pour quelque raison vous avez trouvé explicitement-en coffret de table et les noms de colonne souhaitable pour vous, mais c'était quand même quelque chose que je voudrais fortement en garde contre l'.
Ma convention lorsque j'ai utilisé Oracle sur une base quotidienne est que dans le code que je mettrais tous les Oracle SQL mots-clés en majuscules et tous les identificateurs en minuscules. Dans la documentation que je mettrais tous les noms de table et colonne en majuscules. C'était très pratique et lisible pour être en mesure de le faire (bien que parfois une douleur à type de nombreuses capitales dans le code -- je suis sûr que je pourrais avoir trouvé un éditeur pour aider, ici).
À mon avis MySQL est particulièrement mauvais pour les différentes informations à ce sujet sur différentes plates-formes. Nous devons être en mesure de dump des bases de données sous Windows et de les charger dans UNIX, et cela est une catastrophe si le programme d'installation de Windows j'ai oublié de mettre le SGBDR en mode sensible à la casse. (Pour être juste, une partie de la raison que c'est une catastrophe, nos codeurs pris la mauvaise décision, il y a longtemps, à s'appuyer sur le cas de la sensibilité de MySQL sous UNIX.) Les personnes qui ont écrit les Fenêtres de programme d'installation de MySQL fait vraiment très pratique et Windows-like, et c'était génial de se déplacer vers de donner aux gens une case à cocher pour dire "voulez-vous activer le mode strict et MySQL plus conforme aux normes?" Mais il est très pratique pour MySQL diffèrent nettement de la norme, et puis aggraver les choses en tournant autour et différentes de sa propre norme de facto sur les différentes plates-formes. Je suis sûr que sur les différentes distributions Linux, cela peut être aggravé, comme les emballeurs pour les différentes distributions probablement à la fois intégré leur propre préféré MySQL paramètres de configuration.
Ici's une autre DONC, la question qui obtient dans la discussion si la casse est souhaitable dans un SGBDR.
Pas. MySQL n'est pas sensible à la casse, et ni est la norme SQL. C'est juste la pratique courante consiste à écrire les commandes en majuscule.
Maintenant, si vous parlez de la table/colonne de noms, alors oui ils le sont, mais pas les commandes elles-mêmes.
Donc
est le même que
mais pas le même que
J'ai trouvé ce blog être très utile (je ne suis pas l'auteur). Résumant (veuillez lire, tout de même):
Il a trouvé DB2, Oracle et les bases de données Interbase/Firebird sont 100% conformes:
Je ne pense pas que SQL Server est sensible à la casse, au moins pas par défaut.
Quand je suis interrogation manuellement par l'intermédiaire de la Gestion de Studio, je le rate cas tout le temps et il gaiement l'accepte:
Mots-clés SQL sont insensibles à la casse eux-mêmes.
Noms de tables, de colonnes, etc, ont une sensibilité à la casse qui est à la base de données dépendantes - vous devriez probablement supposer qu'ils sont sensibles à la casse, sauf si vous savez autrement (Dans de nombreuses bases de données, ils ne sont pas bien; dans la table MySQL noms sont PARFOIS sensibles à la casse, mais la plupart des autres noms ne sont pas).
De comparer les données à l'aide de =, >, < etc, a un cas de conscience qui dépend des paramètres de classement qui sont en cours d'utilisation sur la base de données, table ou de la même colonne en question. C'est normal, cependant, de garder classement assez homogènes à l'intérieur d'une base de données. Nous avons quelques colonnes qui ont besoin de stocker la casse des valeurs; ils ont un classement spécifiquement.