こんにちはゲストさん    
MySQL5系に於ける文字化け対策

Mysql 5がリリースされてから結構経ちますが、以前のバージョンよりは少し文字化けは減った気がしますが、抜本的には大きな差が無い感じがします。
例えば、Mysql 4 から5へ移植しよいと思うと次のような不具合が発生したりします。
Mysql5の場合項目単位でキャラクターセットが可能な為、例えばテーブルのキャラクタ(文字コード)の設定と項目の設定が異なっていると思わぬ所で文字化けが発生したりします。
※因みにMysql 4の場合テーブル単位で文字コードを設定して於けば各項目の文字コードは無視されるので、大元で設定していれば問題無かったのですが、Mysql 5ではそう簡単には行きません。

注意1・・・テーブルの文字コードと各項目の文字コードは統一する事
と云う事です。
特定の項目が文字化けを起こす場合、その項目の文字コードのチェックをすると違う文字コードが設定されていたりします。

例えば、さくらレンタルサーバ + Navicat(DB管理ツール)でデータ管理を行う場合
phpmyadmin」を使ってMySQL 接続の照合順序:で文字コードを設定して、それからNavicatの接続設定にて「Mysqlのキャラクタセット」にチェックを入れてから各テーブルを構築すれば上手く行く?。(環境により異なりますので断言は出来ませんが・・・)

しかし、Mysql 5になってもやはりSJISとの相性は悪いようで、キャラクタセットを全てSjisにしてアクセスすると、@や鰍ネどの文字が化けます、やはりこれらの文字を扱う場合には、UTF-8が一番安定しているようです。
結局以前のように文字コードをUTF-8に統一しないと、完全に文字化けは解消しないようです。
日本語だからSJISが良い何て思いますが、結局UTF-8で統一した方が良さそうです。

結局、UTF-8以外も文字コードで文字化けが解消しないのであれば、全てデフォルトをUTF-8にして他の文字コードの設定を出来ないようにして欲しいものです。

メールでの問合せ
意見を書込む
WINDOWS用のXAMPPでMySQL5系の文字化け対策

XAMPP+MySQL5.1系でSHIFT-JISを使いたい場合の変更箇所

XAMPPフォルダのMySQLのbinフォルダ内のmy.ini(xamppのバージョンによってはファイルの場所が別のところにある場合があります。)をエディタで開き下記の箇所に
[mysqld]
skip-character-set-client-handshake
default-character-set=sjis
init_connect="SET NAMES sjis"
を追加

utf8で使用する場合はsjisの部分をutf8に変更して下さい!
 xampp_stop.exeを実行しxamppを停止しその後、xampp_start.exeでxamppを再起動
これで解決する場合もありますが、ソースコードや参照ファイルを全てShift-jisに変更しなければなりません。
本来はソースコードもDB関係文字コードもUTF-8で作成した方が将来性がある思います。
windowsの場合はserverとしての使用というより自分のパソコンでのテスト環境という場合の方多いと思いますが、レンタルサーバはほとんどがLINUXベースですのでShift-jisで作成していると、アップロードして動かない、DBの部分が「?????」となってしまった等のトラブルが発生すると可能性が高くなります。
この辺の対策は数年前にいろいろやって解決していたのですが、Windows7などの新しいOSが出るといろいろテストしなければならないので、忘れないようにここに書いておきます。

ここの対策方法は最近購入したWindowsVistaにXamppをインストールしてテストした状態ですので、WindowsXPやLinuxにXamppをインストールしてのテストはこれからやってみたいと思いますので、ここに情報を追記していく予定です。

windowsXPに上記の設定でxamppを組み込んで見ましたが問題なく動きました。
最初DBテーブルの文字コードをutf8のまま動かしてあららーー文字化けすると思ったら、DBテーブルをShift-jisに変換するのを忘れていました
DBテーブルをShift-jisに変換したら文字化けはスッキリ直りました。カンタンカンタン

メールでの問合せ
意見を書込む
文字化け・・・

今となって懐かしい話だが、記憶のあるウチに書き留めておきっます。
MySqlの文字化け」と検索すると沢山の記事が引っかかると思います。

文字化けはMysqlのバージョンによって大きく異なります。
例えばVer4.0では何事も無くSJISを使っていられたのに、Ver4.1にした途端にいきなり文字化けと云った現象が起こります。 たかが4.04.1へのバージョンアップが命取りになります。
極端な話をすればMysql4.0Mysql4.1は別の物と考えた方が良いでしょう。
結論を言えば、SJISは日本独自の文字コードであり国際コードとしては扱われなって置き去りにされた常態です。 根本的にはマルチバイト対応におけるデータベースシステムのバグ(文字コードの誤認識)なのでしょうが、今更急に流れが変わるわけでも無いので、対応策のみまとめておきます。

対策
簡単に云えばSJISを使わずに全てUTF-8に文字コードを統一してしまうことです。
対策my.ini(my.cnf)に次のように追加
[mysqld]
skip-character-set-client-handshake  ←文字コードの自動判別を実施しないようにする
(正確にはMySQL バージョン 4.1.15 以降)

対策デフォルトキャラセットを全てUTF-8にする
default-character-set=utf8

結局、サイトの中の文字コードを全てUTF-8に統一してしまうと云う事です。
携帯サイトなどの都合でどうしてもSJISが必用な場合にはmb_convert_encodingでSJISに変換して表示する。

教訓・・・
新しいものが全ての面で優れているとは限らない。(勿論、優れている点の方が多いですが・・・

メールでの問合せ
意見を書込む
集金代行データの読み込み・・・

ある時「販売管理システム」を制作していたところ・・・お客様から「集金代行結果データ」を自動で読み込むことが出来ないかと云った相談を受ける・・・
確かに、非常に多くの入金データを顧客を選んで付き合わせを行って入力処理をするのは大変な作業である。
データを見たところ特に問題のないCSV形式のデータだったので、「phpMyAdminでも同じような事が出来るし・・・」と思い軽く引き受けてしまった。

簡単なテーブルを設計してまずそのCSVファイルをphpMyAdminで読み込んでみると。。。確かにデーブルにデータが読み込まれて「入金結果データテーブル」が形成されている。
ここまで来るともう出来たも同然。 何故かと云うとphpMyAdminも所詮PHPでコーディングされており、いざとなればその部分を参考に作ってしまえば良いということである。

そこで少しこれらの事について調べてみる・・・
  どうやら、この「LOAD DATA INFILE」を使えば簡単に読み込めるような事が読み取れる。 

マニュアルには「ローカルデータ」が読み込めるような事が書いてあるが一向に上手く行かない・・・
  そこで頼みの綱のphpMyAdminを少し解析してみると、どうやらLOCALからファイルのアップロードを行いその時にブラウザに作られるテンポラリファイルを指定してデータのインポートをしているような感じになっているので、同じようなqueryを作って試すが、クウォート関連のエラーにはまってしまう

このままでは生産性が悪いのでこのLOAD DATA INFILEを使用するのは一時ペンディングにし、CSVファイルをサーバにアップロードし、そのCSVファイルからオーソドックスな方式でデータを読み込むことにした。
結果お見事に成功した。  やはり横着はいけませんネ^^; 結局オーソドックスにやった方が良い方法は沢山あります。

総括・・・
LOAD DATA INFILEを諦めた訳ではありません、一番重要なのはLOAD DATA [LOCAL] INFILELOCALオプションが問題のような気がします。このLOCALオプションを使うことにより、ローカルファイルが使えるようになるようですが、その詳細に関する情報がありません(サーバ環境の設定もある感じ)、恐らくアップロード時にキャッシュされたTMPファイルを指定すれば良いような気がしますが、時間のある時にまた研究してみます。

そんな事よりも口座引き落とし用の全銀データを作らなくては・・・

メールでの問合せ
意見を書込む
■ 1〜4件 全4件中