Mysqlから取得したデータの文字化け

解決


まさあき  2007-05-01 05:48:31  No: 98679

VB6から接続先のPHPファイルに命令を送りMysqlからデータを取得しバイナリ変換したデータをVB側でバイナリで受け取り溜め込む処理をしています。

VB6 xmlhttp 利用

PHP Mysql関数利用

Mysql  アクセス

PHP application/octet-stream

VB6  バイナリ解析しクラスに溜め込む

溜め込んだデータを表示する際にADODB.Streamを利用し変換処理をかけているのですがどうもうまく行きません。

取得した文字「か」が &H37 <mRow(0) = 63> と表示されています。

Mysql→PHP側の問題でしょうか?
よろしくお願いします。

'*****************
'clsRow.cls
'*****************
Option Explicit

Private mRow()                  As Byte

'表示
Public Property Get get_RowNam() As String

    Dim adoStream           As New ADODB.Stream
    Dim newByte             As String
    
    newByte = mRow
    If newByte = "" Then
        Exit Property
    End If
    
    Set adoStream = New ADODB.Stream
    With adoStream
'        .Charset = "EUC-JP"
        .Charset = "UTF-8"
        .Type = adTypeBinary
        Call .Open
        Call .Write(mRow)
        .Position = 0
        .Type = adTypeText
        .Charset = "Shift_JIS"
        
        get_RowNam = .ReadText()
        Call .Close
    End With
    Set adoStream = Nothing
End Property

Public Sub DataSet(ByRef allBinary() As Byte)
    mRow = allBinary
End Sub

開発環境
WindowSXP
VS6.0Sp6

ローカルテストサーバー
Appach Ver 2.0
php Ver 5.2.1
mysql Ver 5.0.24 MySQL の文字セット: UTF-8 Unicode (utf8)


まさあき  2007-05-01 06:17:22  No: 98680

補足

(Mysqlからデータを受け取らないで)
PHPから直接「か」を同じ形式でVB側に渡すと

&H82A9

<mRow(0) = 130>
<mRow(1) = 169>

のデータが取得できました。

Mysql

PHP
にデータを渡しているところでおかしなってそうです。

&H37 はもとのデータに戻せるでしょうか。

よろしくお願いします。


ヤマ@文系  2007-05-01 07:21:15  No: 98681

my.iniの設定はどうなってますか?
skip-character-set-client-handshake
とかで調べてみてください。


まさあき  2007-05-01 08:09:18  No: 98682

ヤマ様返信ありがとうございます。

my.iniいろいろいじってみましたが駄目でした。

[client] 
default-character-set=ujis

[mysql] 
default-character-set=ujis

[mysqld] 
default-character-set=ujis
skip-character-set-client-handshake 

ネットでいろいろ調べてみるとMySQL4.1以降は文字化けの問題が多いみたいですね。
VB側でどんなものでもうまく変換できるように出来きる
仕組みを作成できたら最高なのですが。

もう少し独自で調べてみます。


ヤマ@文系  2007-05-01 08:52:30  No: 98683

VBとはなれますが、
httpd.confとかphp.iniの
文字コード設定とか確認してみたらどうでしょう。

'http://q.hatena.ne.jp/1159280538


まさあき  2007-05-01 10:51:46  No: 98684

ヤマさんありがとうございます。

どうもphpMyAdmin側の設定の問題だったようです。
VB板なのにお騒がせしました。
解決に至った経緯を書き記しておきます。

データ検証の際、phpMyAdmin側でデータ作成し「select」のクエリー結果をVB側でADODB.Streamを利用し

UTF-8

Shift_JIS

変換していました。

なかなか解決の糸口が見つからなかった為「Insert」、「Update」のロジック
を先に書くことにしました。

VB6側で作成した文字列のクエリーを下記文字コードで変換。

Shift_JIS

UTF-8

UpdateしたデータをphpMyAdminで確認。
文字化け確認。

VBアプリ側でデータ確認。
phpMyAdmin側で作成したものは文字化け
VBアプリで作成したものは正常に表示。

よってphpMyAdminの設定ミスと判断。


まさあき  2007-05-12 08:43:31  No: 98685

解決いたしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加