mysql:435
From: Satoshi Koiwa <Satoshi Koiwa <koiwa@xxxxxxxxxx>>
Date: Wed, 9 Dec 98 20:57:47 +0900
Subject: [mysql 435] Re: CREATE TABLE 句についての質問
毎度私は民斗さんの反応の速さに仰天しております。 >MS ACEESS等にテーブルをリンクすると、文字列は左詰で表示されています。INT >だと右詰で表示されています。(NUMBER型は左詰です) >このことからNUMBER型は数値しか入らない文字列のことではないかと、推測して >おります。 MS ACCESSは、まぁ、よくわからんのでパス(はははは)。 OracleのNUMBER型というのは確かに「数値しか入らない文字列」という扱いだと認 識しています。そしてMySQLのDECIMAL型も同様に「CHAR項目のように振舞います」 とマニュアルにあります。その意味ではOracleのNUMBER型にそのまんま対応するの はDECIMAL型だといっていいかもしれません。NUMERIC型というのもあるんですが… …。確かOracleでもDECIMAL型が使えたように思います。標準SQL(SQL92でしたっけ ?)で定義されているんですよね、たぶん、DECIMAL型。 私がOracleで扱っているのは事務処理システムなんで、浮動小数点だっ!!というよ うなものはなくって、小数が出てくるのは消費税計算とか平均とかを出すときくら いです。で、かつてInformixではINTEGER型を使っていたんですが、Oracleに移行し たときにどこかでNUMBER型が推奨されていたんでそのまんまNUMBER型にしちゃいま した。なんで推奨されていたんだろうかなぁ、すでに忘れています。 まぁMySQLでいきなり大事な仕事をはじめることはないとは思うんですが、念の為に 、数値の扱いはやっぱりDBエンジンごとに違っていたりするんで要注意だと思いま す。 試しに0.999×0.999をやってみます。 Oracleだと(開発環境なんでちょっと古い) ============================================= Oracle8 Release 8.0.3.0.0 - Production With the Partitioning and Objects options PL/SQL Release 8.0.3.0.0 - Production に接続されました。 SQL> select 0.999 * 0.999 from dual; 0.999*0.999 ----------- .998001 SQL> create table test(wao decimal(3,3)); 表が作成されました。 SQL> insert into test values(0.999); 1行が作成されました。 SQL> select wao * wao from test; WAO*WAO ---------- .998001 SQL> ============================================= となります。で、MySQLだと ============================================= mysql> select 0.999 * 0.999; +---------------+ | 0.999 * 0.999 | +---------------+ | 0.998 | +---------------+ 1 row in set (0.00 sec) mysql> create table test(wao decimal(3,3)); Query OK, 0 rows affected (0.00 sec) mysql> insert into test values(0.999); Query OK, 1 row affected (0.00 sec) mysql> select wao * wao from test; +-----------+ | wao * wao | +-----------+ | 0.998 | +-----------+ 1 row in set (0.00 sec) mysql> ============================================= となります。 #!/usr/bin/perl use Mysql; $dbh = Mysql->connect("localhost", "shop_db", "shop", "shop"); $sql = "select wao * wao from test"; $sth = $dbh->query($sql); $wao = $sth->fetchhash; print "[$wao]\n"; というのを作っても [0.998] というのが返ってきます。まぁこれは型の問題というよりは型から取り出したあと の処理の問題でしょう。元のシステムがOracleどっぷりだったりすると結構とまど うかも。 ちなみに私は最初「select 0.999 * 0.999」が「from dual」なしで動くってのに とてつもなく違和感がありました。慣れました。 OracleからMySQLへの移行ですが、7.3とかでちょっと規模が大きいシステムだと CREATE TABLE文の最後にSTORAGE(INITIAL 5000K NEXT 1000K)とかPCTFREEだとか書 いてあるでしょうから、そのままポンとはいかないかもしれませんね。 あと、私の使っているMySQLは3.21.33bなんで、「ふつー」の方達が使われている新 しい3.22系とは違うかもしれません。よくわかりません。
-> 435 1998-12-09 20:57 [Satoshi Koiwa <koiwa] Re: CREATE TABLE 句についての質問 436 1998-12-09 22:04 ┣[Tamon Nomura <tamon@] 438 1998-12-10 09:29 ┗[民斗 <tommy@xxxxxxxx]