2016-07-15 4 views
1

MySQL Connector/Cライブラリに対してクエリを実行した場合、私が戻ってきたデータはすべて数値データ型を含むchar *形式です。MySQL Connector/CクエリからネイティブCデータ形式ではないデータが返されますか?

たとえば、4バイトのデータを返すのではなく、MySQLでINTEGERの4つのカラムを返すクエリを実行すると、実際にはASCIIコード化された4バイトのASCII文字を返します。1は実際には数値49(ASCIIの場合は1)です。

これは正確であるか、完全なものがありませんか?

atoi私のコードでintにバイトを返したか、またはネイティブなCデータ型を直接MySQLクライアントから取得するメカニズムがありますか?

私の本当の疑問は、mysql_store_result構造が、そのデータをASCII符号化表現に変換して、アプリケーションコードでバイパスすることができるのでしょうか?

+0

mysqlの整数は32ビットです。 4 intの場合は、16バイトのデータを戻す必要があります。 –

+0

あなたが使用しているいくつかのツールは、結果を理解するのに迷っているあなたを導いています。どのくらい正確にあなたは "戻ってくる" – Hogan

+0

私は間違いなくです。多くの '' '1000000'が8バイト文字列(ASCII = 49,48,48,48,48,48,0)として返されます。数字の場合は7バイト、その後はヌルバイトです。 – SimplePanda

答えて

1

私は、データがMySQLプロトコルのテキストとして電線に送信されると信じています(私はWiresharkでこれを確認しました)。つまり、mysql_store_result()がデータを変換していないということです。受信したデータを単に渡すだけです。 MySQLは実際に整数をテキストとして送信します。これはいつも私にとっても奇妙なデザインのように思えます。

+0

うんざりする。 "49"はエラーではなく、バイトをint = 1に戻す必要がありました。準備された文を使用する場合のように見えます。MySQLはデータエンコーディング用のバイナリプロトコルに切り替わりますが、コネクタ/ Cコードが任意のSQLをスタックから遠ざけている場合には役立たないでしょう。 – SimplePanda

1

MySQLはもともとあなたが現在使用しているText Protocolしか提供していませんでした。(注記の通り)結果は文字列としてエンコードされていました。 MySQL v4.1(2003年4月リリース)は、Prepared Statementプロトコルを導入しました。これは(とりわけ)結果をバイナリ形式で送信します。

Connector/Cで後者のプロトコルを使用する方法の詳細については、C API Prepared Statementsを参照してください。

関連する問題