- - PR -
MySQLで文字化けしています。
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-19 08:59
こんにちは。ゆきおといいます。
ASP.NET(C#)を使用して、webアプリを構築しています。 既存で稼動しているデータベース(MySQL)よりデータを取得して表示させるページを作成しています。表示結果は全角文字が文字化けしてしまいました。 【環境】 OS:WindowsXP Professional sp2 DB:MySQL 3.23.58 言語:Visual C#.NET + .Net Framework v1.1 接続プロバイダ:MySQL@Connector/Net 1.0.7 文字コードについてはアプリケーションはシフトJISで、MySQLは日本語EUCです。 接続プロバイダはシフトJISで指定して接続しています。 以下に環境を記します。 【文字コード】 [ASP.net]:shift-jis web.configで設定 <globalization requestEncoding="shift_jis" responseEncoding="shift_jis" /> [MySQL]:日本語EUC 設定値 ujis 【接続プロバイダのソース】 con.ConnectionString = String.Format("Server={0};User Id={1};Password={2};Database={3};Charset={4};Pooling={5};","xxx.xxx.xxx.xxx","User1","Password1","DB_NAME","sjis",true); 【問題箇所】 取得したデータをDataGridに表示したいのですが、文字化けします。 【質問箇所】 文字化けしないようにしたいのですが、何か良い解決方法があれば教えていただきたいと考えています。 なお前提条件として 1.MySQLデータベースは稼動中システムで使用しているため文字コードは変更不可 2.他の箇所は(web.config等)変更可です。 以上教えていただけるとありがたいです。 | ||||||||
|
投稿日時: 2006-08-19 13:05
eucで取りに行くんだから接続文字列のcharsetにはeucを指定するんじゃないですか?
| ||||||||
|
投稿日時: 2006-08-19 14:01
べるさん返答ありがとうございます。
接続プロバイダで『ujis』を指定したのですが、fill実行時にアプリケーションエラーが発生したので『sijs』を指定しています。 【エラーメッセージ】 ※アプリケーションエラー・ページにて Character set 'ujis' is not supported 【プロバイダ:コネクション】 con.ConnectionString = Strin.Format("Server={0};User Id={1};Password={2};Database={3};Charset={4};Pooling={5};","xxx.xxx.xxx.xxx","User1","Password1","DB_NAME","ujis",true); 【接続】 MySqlDataAdapter mySqlda = new MySqlDataAdapter("SELECT * FROM table", this.Con); mySqlda.Fill(ds); fill実行時にエラーが発生 >eucで取りに行くんだから接続文字列のcharsetにはeucを指定するんじゃないですか? 私もそう思いましたが、コネクション文字列での'ujis'指定ではfill実行時にアプリケーションエラーとなってしまいます。 Charasetの指定文字の形式(日本語EUCの場合:ujis)が悪いのか不明です。 | ||||||||
|
投稿日時: 2006-08-20 07:04
※私、MySQL@Connector/Net 1.0.7 をそれほど理解してるわけではありません。
当然文字化けします。.NET側でエンコードしなおせば別ですが。
で、MySQL@Connectorのインストールフォルダにソース(src)がありますよね(プロジェクトになっている) これにCharSetMapってクラスがあるんですけど、怪しげにコメントアウトされている箇所があって ujisのマッピングが外されています。 mapping.Add("ujis", "EUC-JP"); を加えてビルドしてできたdllを使用したら正常に動きましたよ。 ※コメントアウトでは「EUC_JP」になってましたがこれではだめでした。 | ||||||||
|
投稿日時: 2006-08-21 07:10
べるさん返答どうもです。
接続プロバイダ「MySQL@Connector/Net 1.0.7」で『ujis』が指定できない理由はこれのような気がします。今日ですが開発環境で確認してみます。 結果はどのようになったか報告します。もう暫くお待ちください。m(__)m | ||||||||
|
投稿日時: 2006-08-22 06:29
返答が遅れましたが、結果報告です。
MySQLコネクタの以下のコードを修正し、コンパイルしてdllを作成しました。 【修正】 CharSetMap.cs mapping.Add("ujis", "EUC-JP"); を追加 上記dllを使用して、プログラムを実行したら全角文字の文字化けが解消されました。 べるさん大変助かりました。CharSetMap.csを修正するのは全く気づきませんでした。
※ 「EUC-JP」の指摘も素晴らしいです。 ありがとうございました。 |
1