C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: MySQL内のvarchar型データをバイナリーで取得したい


(過去ログ 170 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■97902 / inTopicNo.1)  MySQL内のvarchar型データをバイナリーで取得したい
  
□投稿者/ じぇいみょん (1回)-(2021/08/05(Thu) 11:55:03)

分類:[データベース全般] 

うちのホームページでPHP+MySQLのデータベースを使おうと思っていて、
別サイトに仮説したMySQLのデータを移行しようと思います。
ただ、別サイトでMySQLを用意してくれた担当があまりDBに詳しくないようで、
別サイトのMySQLのvarchar型に格納されている全角文字が
文字化けしてしまったようです。

別サイトのPHPではutf-8を使用しているとのことですが、
MySQL側の設定に問題があったのかも知れません。
このMySQLを管理するためにphpMyAdminというものが用意されており、
ここで該当テーブルの該当カラムの全角であろう文字を見ると、
a等の英字の上に小さな〜や○が付いているようなものや、□が表示されています。

そこで質問なのですが、このテーブルからバイナリーでデータを取得し、
元の文字を復元する、ということは可能なのでしょうか?
すでにDBに登録された時点で復元不可なデータがになっているのでしょうか、
それともそもそもvarchar型のデータをバイナリーで取得することは
不可能なのでしょうか?

今の所、それ程大事な項目のデータではないので、適当に書き換えても
いいのですが、もし方法があるのであれば知りたいなと思いまして
投稿しました。

また、文字化けデータを復元する他の方法があればそれでも結構です。

よろしくお願いいたします。
引用返信 編集キー/
■97904 / inTopicNo.2)  Re[1]: MySQL内のvarchar型データをバイナリーで取得したい
□投稿者/ 古谷 (3回)-(2021/08/05(Thu) 13:52:09)
No97902 (じぇいみょん さん) に返信

別サイトでUTF-8でデータを格納してて
別サイトで文字化けが生じている

その文字化けを修正して、新サイトにデータ移行したいってことかなあってるかな?

UTF-8でエンコードされた文字列をShift_JISでデコードしてしまったなど
どういうしくみで文字化けが起こっているのか調査するのがよいと思う

問題を解決するには問題をよく知ることが大事
引用返信 編集キー/
■97905 / inTopicNo.3)  Re[1]: MySQL内のvarchar型データをバイナリーで取得したい
□投稿者/ 魔界の仮面弁士 (3159回)-(2021/08/05(Thu) 14:34:10)
No97902 (じぇいみょん さん) に返信
> 別サイトのPHPではutf-8を使用しているとのことですが、
> MySQL側の設定に問題があったのかも知れません。

MySQL 側は、utf8mb4 でしょうか、それとも utf8 でしょうか。
BMP 文字なら違いはありませんが、U+10000 以上が含まれる場合は utf8mb4 が必要です。


> a等の英字の上に小さな〜や○が付いているようなものや、

前者は、CP1252 だと 0xE3 ; Unicode だと U+00E3 ; JIS X 0212 だと 0x2B2A です。
後者は、CP1252 だと 0xE5 ; Unicode だと U+00E5 ; JIS X 0212 だと 0x2B29 です。

※Excel VBA でシートに表示した場合
Sheet1.Range("A1").Value = ChrW(&HE3)
Sheet1.Range("A2").Value = ChrW(&HE5)


> すでにDBに登録された時点で復元不可なデータがになっているのでしょうか、
たとえば

INESRT INTO TBL (FLD) VALUES ( unhex('E38182E382A2E6849BC3A3') );

SELECT FLD, hex(FLD) FROM TBL;

などとして UTF-8 文字列の入出力を確認してみては如何でしょうか?

ちなみに
 E3 81 82 → 平仮名「あ」
 E3 82 A2 → 片仮名「ア」
 E6 84 9B → 漢字「愛」
 C3 A3 → チルダ付きラテン小文字「a~」
です。


データベース内の情報には問題がなく、設定上の問題で化けているのであれば、
設定の見直しで対応できる可能性があります。

データベース内の文字がそもそも破損している場合は、変換以前の問題なので
移行元のデータベースからの変換をやり直す必要があるでしょう。


もしもデータベース側が無事だけど、文字化けが解消できない場合、
Web ページ上に表示することだけが目的なら、HTML 側に対して
"a〜" は「&#227;」か「&#xe3;」
"a○" は「&#229;」か「&#xe5;」
のように数値文字参照で記述すれば、Web ページ側の文字コードに依存せずに
表示できます。(hex 関数で変換しておいて、PHP 側で数値文字参照にするなど)

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -