2016-08-22 4 views
1

以下のクエリを異なる言語と異なるDBクライアントで実行しようとしています。私の観察を1としてMysqlが浮動するのはなぜ、Javaだけでうまくいくのですか?

SELECT MY_FLOAT_COL*1 FROM MY_TABLE; 

SELECT MY_FLOAT_COL FROM MY_TABLE; 

this answerによって推論としての最初のクエリが返すには、そのようなハイジSQLとしてPythonとDBクライアントで結果を外れました。しかし、JDBCコードを使用しているJavaコードやDBクライアント(Squirrel)は、上記のクエリに対して同じ結果を返します。 Javaにはどのような魔法がありますか。他の言語/クライアントとの魔法の仕組みをどうすれば作れますか?

**注:**これは実際に私の別のquestionのサブセットです。最初の質問は、ユーザーが完全な回答を提供するのを邪魔します。私はこの質問にもっと具体的に答えてほしい。

+0

ドライバの問題が多いようですが、 – chrylis

+0

Java以外のすべての言語でのドライバの問題..? – Kannan

答えて

1

other questionで言及したように、MY_FLOAT_COL*1DOUBLEに変換されるため、精度レベルが変更されます。

クライアントからデータを取得するときに、数値として扱う場合は、クライアントが使用する種類に変換します。したがって、変換は2回発生します。

javaでは、私はあなたがfloatに戻ってそれを変換すると思います。 BigDecimal(またはString)として取得すると、データベースで内部的に使用されている正確な表現が表示されます。


JavaとPythonの間の差は、JavaおよびPythonで同じではないfloatの内部表現によるものであることに留意されたいです。 Pythonのfloatはjavaのdoubleに似ています。

+0

どのようなタイプのものでも同じ結果が得られます。私はそれが重要だとは思わない。 – Kannan

+0

あなたのJavaとPythonコードを投稿してみてください。だから私たちは違いを見ることができます。 –

関連する問題