MySQLリファレンスマニュアルから:
数値をENUM列に格納すると、その数値は可能な値へのインデックスとして扱われ、格納された値はそのインデックスを持つ列挙型メンバーになります。
SQL_SMALLINT
しかし、 ODBCを使用してそのENUM列に値を書き込もうとすると、エラーHY000:1:1265(列のデータが切り捨てられます...)が発生します。
では、ODBCを使用してMySQL ENUM列に数値を書き込み、この数値が列挙型インデックスとして解釈されるようにするにはどうすればよいでしょうか。
編集:いくつかの詳細情報
列は次のように定義されます。
`TrackState` ENUM('NEWE','NEWN','VALID','INVISIBLE','CLOSED','DIED') NULL
ODBCで使用されるステートメントは次のとおりです。
INSERT INTO test (TrackState) VALUES (?)
そして私のCコードでは、符号なしの短い変数をバインドするためにとを使用SQLBindParameter
しています。SQL_C_USHORT
SQL_SMALLINT
TrackState列を通常のINT
列に変更すると、数値(列挙型のインデックスとして解釈されたい)が正常に書き込まれます。