--ansi
または
--sql-mode=ANSI
オプションを指定して
mysqld
を開始すると、MySQL
サーバの動作は次のように変わります。
||
は、OR
のシノニムではなく、文字列連結演算子になる。
‘"
’
は、文字列引用符ではなく、MySQL サーバの
‘`
’
引用符のように識別子引用符として扱われる。‘`
’
は、ANSI
モードでも識別子の引用に使用することができる。つまり、文字列の引用に二重引用符を使用することはできない。二重引用符を使用すると、識別子として解釈されてしまうためである。
関数名と ‘(
’
の間にスペースをいくつでも配置することができる。これによって、すべての関数名が予約語として扱われる。そのため、予約語となっているデータベース名、テーブル名、またはカラム名にアクセスするには、それらの名前を引用符で囲む必要がある。たとえば、USER()
関数があるので、mysql
データベース内の user
テーブルの名前とそのテーブル内の
User
カラムの名前が予約語となるため、これらを引用符で囲まなければならない。
SELECT "User" FROM mysql."user";
REAL
は、DOUBLE
のシノニムではなく、FLOAT
のシノニムとなる。
デフォルトのトランザクション分離レベルは、SERIALIZABLE
となる。 See 項6.7.6. 「SET TRANSACTION
構文」。
フィールド一覧にない GROUP BY
でフィールド/式を使用することができる。
ANSI モードでサーバを実行するのは、以下のオプションを指定してサーバを起動するのと同じことです。
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=SERIALIZABLE
MySQL 4.1 では、次の 2 つのステートメントで同じ動作を実現することができます。
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET GLOBAL sql_mode = "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY";
MySQL 4.1.1 では、sql_mode
オプションを次のように使用することもできます。
SET GLOBAL sql_mode="ansi";
この場合、sql_mode
変数の値は、ANSI
モードに関連するすべてのオプションに設定されます。結果を確認するには、以下を実行します。
mysql>SET GLOBAL sql_mode="ansi";
mysql>SELECT @@GLOBAL.sql_mode;
+---------------------------------------------------------------------------+ | @global.sql_mode | +---------------------------------------------------------------------------+ | REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY | +---------------------------------------------------------------------------+ 1 row in set (0.00 sec)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.