[前][次][番号順一覧][スレッド一覧]

mysql:7870

From: Satoshi Higuchi <Satoshi Higuchi <satoshi@xxxxxxxxxx>>
Date: Tue, 03 Jun 2003 19:26:06 +0900
Subject: [mysql 07870] 文字列を’で囲まない場合の解釈について

樋口と申します。

EXPLAINを使ってインデックスが使われるかどうか調べていた時に気が、
付いたのですがVARCHARに対して文字列を'で囲まないでも結果が返って
きます。具体的には郵便番号検索のために次のテーブル定義をしています。

mysql> desc zip;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| serial | int(11)     |      | PRI | NULL    | auto_increment |
| code   | varchar(5)  |      |     |         |                |
| oldzip | varchar(5)  |      | MUL |         |                |
| newzip | varchar(7)  |      | MUL |         |                |
| kana   | varchar(98) |      | MUL |         |                |
| kana00 | varchar(12) |      |     |         |                |
| kana01 | varchar(38) |      |     |         |                |
| kana02 | varchar(52) |      |     |         |                |
| kana03 | text        | YES  |     | NULL    |                |
| addr   | varchar(54) |      | MUL |         |                |
| addr00 | varchar(8)  |      |     |         |                |
| addr01 | varchar(20) |      |     |         |                |
| addr02 | varchar(34) |      |     |         |                |
| addr03 | text        | YES  |     | NULL    |                |
| c10    | char(1)     | YES  |     | NULL    |                |
| c11    | char(1)     | YES  |     | NULL    |                |
| c12    | char(1)     | YES  |     | NULL    |                |
| c13    | char(1)     | YES  |     | NULL    |                |
| c14    | char(1)     | YES  |     | NULL    |                |
| c15    | char(1)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

これに対して、次の2種類のSELECT文を発行しました。
1. 文字列を'で囲まない場合。
mysql> select kana from zip where newzip=0600000;
+------------------------------------+
| kana                               |
+------------------------------------+
| ホッカイドウサッポロシチュウオウク    |
+------------------------------------+
1 row in set (0.68 sec)

2. 文字列を'で囲んだ場合。
mysql> select kana from zip where newzip='0600000';
+------------------------------------+
| kana                               |
+------------------------------------+
| ホッカイドウサッポロシチュウオウク    |
+------------------------------------+
1 row in set (0.00 sec)

どちらも結果を得ることができるのですが、'で囲った場合は検索時間が短くEXPLAIN
を用いてみるとINDEXが使用されていることが判ります。

他のデータベース(DB2)では、文字列は必ず'で囲まないとエラーになった記憶があ
ります。MySQLでも文字列は'で囲まないとエラーになるような厳密解釈させるため
の、オプションは存在しますか? もしありましたらお教えください。
誤ったSQL文の記述でパフォーマンスが低下することが無いように、厳密に解釈させ
たいと考えています。

動作環境は、
OS:	AIX5L
MySQL:	3.23.53

です。

よろしくお願いします。	
-- 
Satoshi Higuchi


[前][次][番号順一覧][スレッド一覧]

->    7870 2003-06-03 19:26 [Satoshi Higuchi <sat] 文字列を’で囲まない場合の解釈について  
      7871 2003-06-04 08:30 ┗[Shingo Yamagai <yama]                                       
      7878 2003-06-06 10:35  ┗[Satoshi Higuchi <sat]