- - PR -
【バグ?】SQLSERVER2005で2バイト文字が破壊される。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-05 00:08
こんばんは。ハニワ祭りです。
最近気がついたのですが、SQLSERVER2005で SELECT CAST('あ' AS VARCHAR(1)) というSQLを流すと、結果として 「・」 が返ってきます。 これもSQLSERVER2005のバグでしょうか? SQLSERVER2000の時はそんなことは無かったように記憶しています。 ちなみに SELECT CAST('あ' AS CHAR(1)) の場合、期待通り「 」(1スペース)が返ってくるようです。 よろしくお願いします。 | ||||
|
投稿日時: 2007-01-05 18:26
これって単に未定義の動作が、たまたま変わったというだけではないですか?
確かMS SQL ServerのCHAR/VARCHARの長さ指定はバイト単位なので、'あ'という 2-byteから1-byteにCASTして意味のある値は戻らないのでは? | ||||
|
投稿日時: 2007-01-07 00:25
SQL Serverのchar(n)やvarchar(n)は、バイト単位ですよ?
1バイトだけ取り出すということは、意味のないコードを取り出そうとしている ようなもので、エラーチェックが漏れているだけかも知れません。 どんな結果を期待しているのですか? | ||||
|
投稿日時: 2007-01-07 13:19
私が期待する動作は、 @前バージョンであるSQLSERVER2000(SP4)と同様に処理されること Acharとvarcharで2バイト文字が泣き別れするかについての仕様の統一 前バージョンとCAST関数の仕様が変わっているのであれば、MSのドキュメントに記述があること。 (個人的には無ければバグに等しいと感じます。) また、さらに試してみたところ SELECT CAST(CAST('あ' AS TEXT) AS VARCHAR(1)) SELECT CAST(CAST('あ' AS NVARCHAR(100)) AS VARCHAR(1)) のように一度VARCHAR以外の型に変換すれば、 意味の無い泣き別れ部分が切り捨てられるようです。 [ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2007-01-07 13:28 ] | ||||
|
投稿日時: 2007-01-07 16:09
バグと大騒ぎする前に マニュアルちゃんと読みました?
これがバグで無い場合は、マニュアル読まずに反応するやつと思われます。 | ||||
|
投稿日時: 2007-01-07 18:07
MSDN2のBooks OnlineのCAST関数についての項目には、 このあたりの動作仕様が明記されていないことは確認済みです。 | ||||
|
投稿日時: 2008-02-14 00:55
自己スレです。
SP2を適用した状態では、現象は再現しなくなっていました。 修正される障害の一覧にも記載されていないため、どうやらこっそり修正されたようです。 マニュアルやドキュメントに載ってないことの方が多いってことですね… | ||||
|
投稿日時: 2008-02-14 10:05
これは違うのかな?
http://msdn2.microsoft.com/ja-jp/library/ms187928.aspx
|