ANSI-Einstellung von MySQL (ANSI-Einstellung von MySQL), Lektion, Seite 723195
https://www.purl.org/stefan_ram/pub/ansi_mysql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

ANSI -Einstellungen von MySQL 

Zeichenfolgenvariablen

Eine Zeichenfolgenvariable hat einen unveränderlichen Namen und einen veränderlichen Wert, der eine Zeichenfolge ist.

Das SET-Kommando

     .---.     .---------------.     .-.     .----------------------.     .-.
--->( SET )--->| Variablenname |--->( = )--->| Zeichenfolgenliteral |--->( ; )--->
'---' '---------------' '-' '----------------------' '-'

Mit dem SET-Kommando kann der Wert einer Zeichenfolgenvariablen festgelegt werden. Als Variablennamen können dabei nur bestimmte „Systemvariablennamen“ verwendet werden.

Wenn »Monat« eine Systemvariable wäre, dann könnte man dieser mit »SET Monat = 'Juni';« beispielsweise die Zeichenfolge »Juni« zuordnen.

Die Variable »sql_mode«

Die Ausführung des folgenden Skripts stellt MySQL  für die aktuelle Sitzung so weit wie möglich auf standardkonformes Verhalten um. MySQL  verhält sich sonst wie frühere MySQL-Versionen, damit ältere Skripte noch ohne Änderungen verwendet werden können. Die durch das Skript bewirkten Unterschiede sind allerdings nicht sehr groß.

Skript (MySQL )
SET sql_mode = 'ANSI,TRADITIONAL';

Das Wort »ANSI«

Wenn der Modus »ANSI« eingestellt ist, so ist die Datenbank eher kompatibel zum offiziellen ISO -Sprachstandard.

Der Modus »ANSI« umfaßt die folgenden Modi: »REAL_AS_FLOAT«, »PIPES_AS_CONCAT«, »ANSI_QUOTES«, und »IGNORE_SPACE«. Die genaue Bedeutung dieser einzelnen Modi wird für den Kurs zunächst noch nicht benötigt und daher erst später erklärt, nämlich jeweils dann, wenn die Auswirkungen eines bestimmten Modus verständlich gemacht werden können.

Das Wort »TRADITIONAL«

»TRADITIONAL« soll nicht  bedeuten, daß sich MySQL  so verhält wie eine „traditionelle (frühere) Version“ von MySQL, sondern daß es sich so verhalten soll wie andere  Datenbanksysteme dies normalerweise tun, die in diesem Zusammenhang als „traditionell“ bezeichnet werden.

Weitere Erklärungen
http://dev.mysql.com/doc/refman/5.1/en/set-statement.html
http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html

Anzeige von Warnungen

Mit dem Klientenkommando »warnings« wird die Datenbanksitzung so eingestellt, daß bestimmte Hinweise (sogenannte „Warnungen“), die das Datenbanksystem dem Benutzer geben möchte, angezeigt werden.

Skript (MySQL )
WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';

»IGNORE_SPACE«

Das folgende Transskript zeigt, daß der Name »POSITION« bei Verwendung von »IGNORE_SPACE« nicht mehr verwendet werden kann, weil das Leerzeichen nicht mehr herangezogen wird, um diesen Namen als Tabellennamen zu kennzeichnen. Ohne diese Kennzeichnung steht »POSITION« in SQL nämlich für eine spezielle andere Bedeutung. Da man diesen Namen eigentlich nicht für eine Tabelle verwenden sollte, ist es ganz gut, wenn man durch eine Fehlermeldung darauf aufmerksam gemacht wird.

Konsole
DROP SCHEMA D; CREATE SCHEMA D; USE D; SET sql_mode = ''; CREATE TABLE POSITION ( I VARCHAR ( 255 ));
Query OK
Konsole
DROP SCHEMA D; CREATE SCHEMA D; USE D; SET sql_mode = 'IGNORE_SPACE'; CREATE TABLE POSITION ( I VARCHAR ( 255 ));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'POSITION ( I VARCHAR ( 255 ))' at line 1

»SET SESSION« und »SET GLOBAL« *

Das hier verwendete »SET sql_mode« ist eine Kurzschreibweise für »SET SESSION sql_mode« (»LOCAL« ist ein Synonym für »SESSION«.). Es wirkt sich sofort auf die aktuelle Sitzung (Datenbankverbindung) aus, hat aber keine Auswirkungen auf andere Sitzungen. Würde man stattdessen »SET GLOBAL sql_mode« verwenden, so würde sich dies erst auf später angelegte, neue Sitzungen auswirken, aber für die aktuelle Sitzung wäre es wirkungslos. Entsprechendes gilt auch für andere Anwendungen von »SET« wie »SET TRANSACTION«.

MySQL-Skripte aus fremden Quellen

Falls MySQL-Skripte aus fremden Quellen importiert werden, ist zu beachten, daß dort oft stillschweigend »SET sql_mode = '';« vorausgesetzt wird. Gegebenenfalls ist die dann voranzustellen, falls »sql_mode« zuvor auf einen anderen Wert als »''« eingestellt wurde.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723195 stefan_ram:723195 ANSI-Einstellung von MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723195, slrprddef723195, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/ansi_mysql