- ベストアンサー
SQLServerへの出し入れで文字化け
- WIN2000+IIS5+SQLServer2000で開発しています。レンタルサーバーでやってるのですが、ASPからSPを呼び出して挿入するとDBに文字化けして入力されてしまいます。
- ASPからSQL文を丸投げすると文字化けしませんが、文字化けしてないレコードをASPから参照するとまた文字化けしてしまいます。
- 自前の環境(WIN2000+SQLServer7)でテストするといずれも文字化けしません。レンタルサーバーが海外のもの、というのが問題なのかもしれませんが、文字コード等には何分詳しくないもので、解決案等ございましたらお教え願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
"?A?・?A"と言う結果を見る限りどうもビット落ちしているみたいですね もしかしてレンタルサーバ環境は英語版とかですか? であればSQLServerのロケール設定を日本に設定する事で回避できるかもしれません。が、無理っぽいですよね(^^; 他の方法としてはストアドプロシージャに文字列を突っ込む前にbase64エンコード等で8bit目を使用しないデータに変換して格納し、出力時にデコードすると言う方法もあります。 またMicrosoft製品なので多分Unicode用のデータ型があるでしょうから、文字列はすべてUnicodeとして処理するようにするのも手だと思います(これが一番オススメ。後で他カ国語を扱ったりするのも楽ですから)。
その他の回答 (3)
- alfeim
- ベストアンサー率58% (114/195)
追加です MicrosoftのKnowledgeBaseからこういうArticleが見つかりました >U.S. English 版 SQL Server 6.0 と 6.5 のデフォルトは ISO 8859-1 (Latin 1 あるいは ANSI) で、コードページ 1252 としても知られています。 との事なので件のレンタルサーバが日本語版SQL Server2000を使っていないのであればコードページの可能性が高いのではないでしょうか?
お礼
お返事遅くなって申し訳ありません。 無事、問題なく動くようになりました。 ありがとうございました。
- alfeim
- ベストアンサー率58% (114/195)
下の方に続いて補足要求です 出来れば元の文の文字列と化けた文字を一緒に指し示してくださるとどういう原因で化けてるかの推測に使えます(可能であればバイト列として指し示してもらえるとなお可です)。
>ASPからSPを呼び出して挿入するとDBに文字化けして入力されてしまいます。(varcharの項目です) >これがASPからSQL文を丸投げすると文字化けしません。 よく意味がわからない^^; ASPからSP? 丸投げ? 自分の言葉ではなく、きちんと書いていただけますか?^^; できれば、その個所のソースもあれば良いです。 >が、文字化けしてないレコードをASPから参照するとまた文字化けしてしまいます。 ココのソースも。
補足
わけわかんないこと言ってすみません。 ASPからパラメータ値を入れてSQLServerのストアードプロシージャ(SP)を呼ぶと、化けてしまうということです。 それに対して、SQL文をASPの中に書きこんでそれをSQLServerに渡すと文字化けしないのです。 例えば、usr_name というvarchar(50)のカラムのみを持つDBにデータを挿入するとして、 set connDB = Server.CreateObject("ADODB.Connection") connDB.Open Application("WebAccount") set cmd01 = Server.CreateObject("ADODB.Command") set cmd01.ActiveConnection = connDB cmd01.CommandText = "sp_test01" cmd01.CommandType = adCmdStoredProc 'リターン値 cmd01.Parameters.Append cmd01.CreateParameter("return",adInteger,adParamReturnValue) '入力パラメータ追加 cmd01.Parameters.Append cmd01.CreateParameter("usr_name_1",adVarChar,adParamInput,50) 'パラメータ値の代入 cmd01.Parameters("usr_name_1")="てすと" 'SP実行 cmd01.Execute として"てすと"3文字を入れようとするとDBには"?A?・?A"となって挿入されてしまいます。"test"ですときちんと入ります。 ストアードプロシージャは、 CREATE PROCEDURE [sp_test01] (@usr_name_1 [varchar](50)) AS INSERT INTO [db-rokyu.net].[dbo].[test01] ( [usr_name]) VALUES ( @usr_name_1) GO としてあるだけです。 参照時のソース等も後ほど掲載しますので、よろしくお願いします。
補足
ご回答ありがとうございます。 alfeimさんの教えに従ってテーブルのカラムをUnicodeにしてみましたが、文字化けは直りませんでした。 さらに、”コードページ”と聞いて意味もわからなかったのですが、ASPの最初にCODEPAGE=932としてみたら、、、 どうもきちんと登録できたようです。 もう少しテストして、登録、参照、更新できることを確認します。 取り急ぎ、ご報告まで。 ありがとうございました。