[PHP-users 33206] PHP5+MSSQLSERVER2005での中国語の取得について

View: New views
11 Messages — Rating Filter:   Alert me  

[PHP-users 33206] PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

成田と申します。
お世話になっております。

現在、以下の環境で開発を行っております。

 Windows Server 2003
 HTTPD2.2系の最新
 PHP5.2系の最新
 MS SQLSERVER 2005

 文字コード UTF-8

1.中国語の文字列を扱うためにテーブルにnvarchar型のカラムを作成
 (中国語文字列がカラムに正しく登録されていることは確認済み)
2.PHPをUTF-8にて記述して、上記カラムの抽出
3.画面に表示すると文字化けしている

いろいろと調べてみたところ、
抽出された文字列がSJISであるため
UTF-8への変換が必要であることがわかりました。

確かに、UTF-8への変換を行ったところ、
日本語文字列の表示は正しく行えたのですが、
中国語文字列の表示は一部が「?」で表示されました。

抽出した結果がSJISであることから
SJISにない中国語文字が化けてしまい、
UTF-8に変換しても「?」になっているのだと思います。

試しに、データベースへの接続を思い当たる3つの方法
 ・mssql関数
 ・PDO_ODBC
 ・ADBdb
にて行ってみましたが、どれも同じ結果になりました。


どのようにすればMS SQLSERVERのnvarchar型のカラムの
文字列をunicodeで抽出することができるのでしょうか。
もしくは、
他の方法で中国語データの保持、ブラウザ表示が正しく行えるのであればご教授願います。

_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33208] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by TAKAYUKI ARAI :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

新井です。

以下、参考になるかもしれません。
http://www.thinkit.co.jp/free/article/0707/14/2/
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33210] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

新井様ありがとうございます。

お教えいただきましたページも参考にして
SQLクエリアナライザでは問題なく抽出できることは確認しております。

ただ、PHPで抽出すると文字コードが強制的に非UNICODEになってしまい、
抽出後にUTF-8に変換すると文字化けが起きてしまいます。

 ■mssql関数で抽出
  mb_detect_encodingで返される文字コード:SJIS
 ■PDO_ODBC関数で抽出
  mb_detect_encodingで返される文字コード:SJIS
 ■ADOdb関数で抽出
  mb_detect_encodingで返される文字コード:SJIS
 ■sqlsrv関数で抽出(MSが提供しているドライバ)
  mb_detect_encodingで返される文字コード:EUC
 ※PHPはUTF-8に設定してあります

日本語のみの場合でも、
抽出したデータをmb_convert_encoding関数を
使用すれば正しく表示させることができております。

このことからも、PHPのMSSQLSERVER系の関数が、
UNICODE型(nchar、nvarchar)に完全に対応して
いないような感じがしています。


どこかの設定を変更したり、
DB接続方法を変更したりすることで
正しくUNICODEで抽出できる方法はないのでしょうか。
(諦めるしかないのでしょうか。。。)

些細な情報でも構いません。
お知恵をいただければ幸いです。
よろしくお願いいたします。


TAKAYUKI ARAI wrote:
> 新井です。
>
> 以下、参考になるかもしれません。
> http://www.thinkit.co.jp/free/article/0707/14/2/
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33212] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by goungoun :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

こんにちは。

興味があったので、
ネットで検索してみたり、
PHPのソースを覗いてみました。

以下は、全くの未検証です。

Windows上のPHP5とSQLServerということで、
構成としてはこんな感じでしょうか。

〜〜〜〜〜〜〜〜〜〜〜〜〜
SQLServer
  ↓
  ↓           DB Server側
=========================
  ↓           DB Client側
  ↓
  ↓
ドライバ(ODBCとか)
  ↓
Client(PHP5)
〜〜〜〜〜〜〜〜〜〜〜〜〜

クライアントのコードページ(codepage)
は日本語Windowsの場合デフォルトで
932(S-JIS)なので、
そのあたりをドライバが考慮して
SQLServer側のデータがUNICODEであっても
Client(PHP5)へ渡すときはS-JISになっている
ような気がします。
UTF-8のコードページは65001だそうです。

ということで、クライアントのコードページを
何とかして932から65001に変更すれば
文字化けしなくなるのでは?と予測

# これが原因なら、
# VBSとかからつないでも文字化けするような?

方法としては2つでしょうか。
(Windows本体のデフォルトのコードページを
変更するという手もあるのかもしれませんが
あまり現実的ではなさそうなので除外)

A.
(IIS経由ではこの方法は使えませんが)
コマンドラインから
chcp 65001
としておき、スクリプトを実行してみる。

B.
サーバに接続するときのオプションでコードページを指定してみる。
ODBCの接続オプションでCPになるそうです。
sqlsrv_connectのオプションもODBCのオプションと同じそうです。

余談ですが、
文字コードを確認する手段として
mb_detect_encoding()を利用されていますが、
100%の保障はなかったと思います。
確実に確認するならバイナリレベルで見ないとわからないはずです。
現に
>  ■sqlsrv関数で抽出(MSが提供しているドライバ)
>   mb_detect_encodingで返される文字コード:EUC
のように、なぜEUCになったのか謎?

それと、googleから
sqlserver nvarchar php
で検索してもいくつか同じ問題についての話や情報が
出てきましたよ。
解決までは至っていないようですが以下のような過去ログもありました。

[PHP-users 30792] SQL Serverで、nvarcharの値がShift_JISで帰ってくる
http://ml.php.gr.jp/pipermail/php-users/2006-November/031309.html

ついでのメモ
LinuxのPHPの場合、
mssqlエクステンションは、FREETDSというライブラリを使っているらしい。
php.iniにmssql.charsetがコードページ指定っぽい。


_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33214] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by kanonbell :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

こんばんは。

私にとっても懸念事項だったので、調べてみました。
PHP+MSSQLの環境は文字については正直厳しいですね。。
扱うのが日本語(+ANSI)のみだったら問題ないんですが。

結果からいうと、「ニーハオ」って中国語と「あいうえお」という日本語をNVARCHARな
カラムに記述しているレコードを正常に表示できました。
表示その他は基本的にUTF-8です。
DBの照合順序を変えたりもしてみましたが、表示には影響しませんでした。

使うのはADO。
データベース仮想化レイヤのADOdbではなく、WindowsのCOM APIの、
データベースアクセスに良く使うやつです。
PHPにはCOM関数があるのでそれ使ってもいいんですが、今回はADOdb経由で
使ってみました。楽だし。

http://jp.php.net/manual/ja/class.com.php
オプション扱いの引数にcodepageがあるので、65001(UTF-8)を指定します。

include('adodb.inc.php');
$conn = &ADONewConnection('ado_mssql');
$conn->charpage = 65001
  :
って感じになります。

取得したレコードセットは普通にUTF-8で入っているので、特に文字コード変換などを
行わなくてもそのまま表示できました。

> Windows Server 2003
> HTTPD2.2系の最新
> PHP5.2系の最新
> MS SQLSERVER 2005

試した環境自体は全く同じです。
MSSQLはローカル。
NVARCHARなカラムに、Management Studio上から直接日本語と中国語を
打ち込んでいます。
当然ながらManagement Studio上からは正常に表示できます。
UTF-8で表示しているASP上でも、正常に表示できます。

以下は蛇足。

> いろいろと調べてみたところ、
> 抽出された文字列がSJISであるため
> UTF-8への変換が必要であることがわかりました。

まあそうなんですが、ちょっと補足。
MSSQL2005は内部的にUCS-2(UCS-2LE?)で文字列を保持しています。
このデータをデータベースクライアントに渡す際に文字コードの変換が発生して
いるみたいなんですね。
BOL読む限り、「ユニコードに対応していない場合データベースクライアントが
相手だったら、相手のコードページにあわせて変換する」ってなことが書いてある
ようですし。

> 試しに、データベースへの接続を思い当たる3つの方法
> ・mssql関数
> ・PDO_ODBC
> ・ADBdb
> にて行ってみましたが、どれも同じ結果になりました。

ADOdbは仮想化レイヤであってドライバ選べるので。。

mssql関数が使用するデータベースクライアントはDB-Libraryで、ものすごく古く、
MSSQL2005ではまだ使えるもののサポートの打ち切りが明言されています。
PHP+MSSQLで使う分には多分一番高機能なのが泣かせますが。。
このDBクライアントはユニコードに対応していないので、強制的にこのクライアントが
存在するWindowsのコードページ(つまりWebサーバのコードページ)である
SJISに変換されます。他言語版Windowsだったら多分他のになるでしょう。
この辺はカラムの照合順序を変えるとSJIS以外の文字コードに変換されることも
あるので、実装が謎だったりしますが。
インド系の照合順序にしてみたら、DB-Libraryはユニコード対応してないから
無理だよ的エラーが出たりもしました。

ODBCはバージョンによるもののユニコードに対応しているんですが、PHP側の
ODBCドライバがOSのコードページをそのまま申請しちゃうのかな?
DB-Libraryと同じようにSJIS変換がかけられてしまい、どうにもダメでした。
ODBCの設定で文字コード変換を無効にしてもだめですね。

SQL Server 2005 Driver for PHP CTPは結局試さなかったんですが、すでに
お試しになってるようですね。
PHP+MSSQLでのまともなデータベースクライアントが風前の灯って感じだったので、
これには少々期待してるんですが、更新されるのかなあ。。
DATETIME型まだ使えないらしいですが。

MSSQL関数の説明ページには、文字コードの強制変換の問題を回避するやり方
として、バイナリを利用するやり方がコメントの形で解説されています。
ADOdbのADOドライバ(ラッパー)は軽く見た感じ最小限度の機能が用意されている
程度で不安を感じないでもなかったので、そちらのやり方も参考にしておくと良いかも
しれません。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33213] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by kanonbell :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

こんばんは。

多分今回の現象には関係してない部分ですが、間違えたので訂正。

> > Windows Server 2003
> > HTTPD2.2系の最新
> > PHP5.2系の最新
> > MS SQLSERVER 2005

WebサーバはHTTPDではなくApacheです。
今2.2.8でしたっけ?最新版ですね。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33216] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

kanonbellさま

ありがとうございます。

先ほど、「COM使ってできました。」ってメールを送信したのですが、
どうやら行き違いになってしまったみたいです。

いろいろと調べていただいた結果は
今後参考にして開発をしていきたいと思います。

本当にありがとうございました。


kanonbell wrote:

> こんばんは。
>
> 私にとっても懸念事項だったので、調べてみました。
> PHP+MSSQLの環境は文字については正直厳しいですね。。
> 扱うのが日本語(+ANSI)のみだったら問題ないんですが。
>
> 結果からいうと、「ニーハオ」って中国語と「あいうえお」という日本語をNVARCHARな
> カラムに記述しているレコードを正常に表示できました。
> 表示その他は基本的にUTF-8です。
> DBの照合順序を変えたりもしてみましたが、表示には影響しませんでした。
>
> 使うのはADO。
> データベース仮想化レイヤのADOdbではなく、WindowsのCOM APIの、
> データベースアクセスに良く使うやつです。
> PHPにはCOM関数があるのでそれ使ってもいいんですが、今回はADOdb経由で
> 使ってみました。楽だし。
>
> http://jp.php.net/manual/ja/class.com.php
> オプション扱いの引数にcodepageがあるので、65001(UTF-8)を指定します。
>
> include('adodb.inc.php');
> $conn = &ADONewConnection('ado_mssql');
> $conn->charpage = 65001
>   :
> って感じになります。
>
> 取得したレコードセットは普通にUTF-8で入っているので、特に文字コード変換などを
> 行わなくてもそのまま表示できました。
>
> > Windows Server 2003
> > HTTPD2.2系の最新
> > PHP5.2系の最新
> > MS SQLSERVER 2005
>
> 試した環境自体は全く同じです。
> MSSQLはローカル。
> NVARCHARなカラムに、Management Studio上から直接日本語と中国語を
> 打ち込んでいます。
> 当然ながらManagement Studio上からは正常に表示できます。
> UTF-8で表示しているASP上でも、正常に表示できます。
>
> 以下は蛇足。
>
> > いろいろと調べてみたところ、
> > 抽出された文字列がSJISであるため
> > UTF-8への変換が必要であることがわかりました。
>
> まあそうなんですが、ちょっと補足。
> MSSQL2005は内部的にUCS-2(UCS-2LE?)で文字列を保持しています。
> このデータをデータベースクライアントに渡す際に文字コードの変換が発生して
> いるみたいなんですね。
> BOL読む限り、「ユニコードに対応していない場合データベースクライアントが
> 相手だったら、相手のコードページにあわせて変換する」ってなことが書いてある
> ようですし。
>
> > 試しに、データベースへの接続を思い当たる3つの方法
> > ・mssql関数
> > ・PDO_ODBC
> > ・ADBdb
> > にて行ってみましたが、どれも同じ結果になりました。
>
> ADOdbは仮想化レイヤであってドライバ選べるので。。
>
> mssql関数が使用するデータベースクライアントはDB-Libraryで、ものすごく古く、
> MSSQL2005ではまだ使えるもののサポートの打ち切りが明言されています。
> PHP+MSSQLで使う分には多分一番高機能なのが泣かせますが。。
> このDBクライアントはユニコードに対応していないので、強制的にこのクライアントが
> 存在するWindowsのコードページ(つまりWebサーバのコードページ)である
> SJISに変換されます。他言語版Windowsだったら多分他のになるでしょう。
> この辺はカラムの照合順序を変えるとSJIS以外の文字コードに変換されれることも
> あるので、実装が謎だったりしますが。
> インド系の照合順序にしてみたら、DB-Libraryはユニコード対応してないから
> 無理だよ的エラーが出たりもしました。
>
> ODBCはバージョンによるもののユニコードに対応しているんですが、PHP側の
> ODBCドライバがOSのコードページをそのまま申請しちゃうのかな?
> DB-Libraryと同じようにSJIS変換がかけられてしまい、どうにもダメでした。
> ODBCの設定で文字コード変換を無効にしてもだめですね。
>
> SQL Server 2005 Driver for PHP CTPは結局試さなかったんですが、すでに
> お試しになってるようですね。
> PHP+MSSQLでのまともなデータベースクライアントが風前の灯って感じだったので、
> これには少々期待してるんですが、更新されるのかなあ。。。
> DATETIME型まだ使えないらしいですが。
>
> MSSQL関数の説明ページには、文字コードの強制変換の問題を回避するやり方
> として、バイナリを利用するやり方がコメントの形で解説されています。
> ADOdbのADOドライバ(ラッパー)は軽く見た感じ最小限度の機能が用意されている
> 程度で不安を感じないでもなかったので、そちらのやり方も参考にしておくと良いかも
> しれません。
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33237] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

お世話になります。

以前に標記タイトルでお力をお借りして解決したのですが、
kanonbellさまにお教えいただいた方法で試してみたところ、
うまく中国語が抽出できませんでした。

================================================================================
$db = &ADONewConnection("ado_mssql");
$db->charpage = 65001; // UTF-8

$myDSN="PROVIDER=MSDASQL;DRIVER={SQLServer};" .
 "SERVER=IPアドレス\インスタンス名;DATABASE=test;UID=sa;PWD=xyz;";

$db->Connect($myDSN);

$rs = $db->Execute("select * from test");
$arr = $rs->GetArray();
print_r($arr);
================================================================================

上記を実行すると、データベースへの接続、データの抽出は出来るのですが
nvarchar型に格納されている全角文字が文字化けして表示されてしまいます。

ちなみに以下のように
 new COM('ADODB.Connection', NULL, CP_UTF8);
自前でADODBオブジェクトを生成してデータの抽出を行った場合は
nvarchar型に格納されている全角文字が表示されております。

ADOdb経由での記述に何か誤りがあるのでしょうか。
よろしくお願いいたします。

kanonbell wrote:

> こんばんは。
>
> 私にとっても懸念事項だったので、調べてみました。
> PHP+MSSQLの環境は文字については正直厳しいですね。。
> 扱うのが日本語(+ANSI)のみだったら問題ないんですが。
>
> 結果からいうと、「ニーハオ」って中国語と「あいうえお」という日本語をNVARCHARな
> カラムに記述しているレコードを正常に表示できました。
> 表示その他は基本的にUTF-8です。
> DBの照合順序を変えたりもしてみましたが、表示には影響しませんでした。
>
> 使うのはADO。
> データベース仮想化レイヤのADOdbではなく、WindowsのCOM APIの、
> データベースアクセスに良く使うやつです。
> PHPにはCOM関数があるのでそれ使ってもいいんですが、今回はADOdb経由で
> 使ってみました。楽だし。
>
> http://jp.php.net/manual/ja/class.com.php
> オプション扱いの引数にcodepageがあるので、65001(UTF-8)を指定します。
>
> include('adodb.inc.php');
> $conn = &ADONewConnection('ado_mssql');
> $conn->charpage = 65001
>   :
> って感じになります。
>
> 取得したレコードセットは普通にUTF-8で入っているので、特に文字コード変換などを
> 行わなくてもそのまま表示できました。
>
> > Windows Server 2003
> > HTTPD2.2系の最新
> > PHP5.2系の最新
> > MS SQLSERVER 2005
>
> 試した環境自体は全く同じです。
> MSSQLはローカル。
> NVARCHARなカラムに、Management Studio上から直接日本語と中国語を
> 打ち込んでいます。
> 当然ながらManagement Studio上からは正常に表示できます。
> UTF-8で表示しているASP上でも、正常に表示できます。
>
> 以下は蛇足。
>
> > いろいろと調べてみたところ、
> > 抽出された文字列がSJISであるため
> > UTF-8への変換が必要であることがわかりました。
>
> まあそうなんですが、ちょっと補足。
> MSSQL2005は内部的にUCS-2(UCS-2LE?)で文字列を保持しています。
> このデータをデータベースクライアントに渡す際に文字コードの変換が発生して
> いるみたいなんですね。
> BOL読む限り、「ユニコードに対応していない場合データベースクライアントが
> 相手だったら、相手のコードページにあわせて変換する」ってなことが書いてある
> ようですし。
>
> > 試しに、データベースへの接続を思い当たる3つの方法
> > ・mssql関数
> > ・PDO_ODBC
> > ・ADBdb
> > にて行ってみましたが、どれも同じ結果になりました。
>
> ADOdbは仮想化レイヤであってドライバ選べるので。。
>
> mssql関数が使用するデータベースクライアントはDB-Libraryで、ものすごく古く、
> MSSQL2005ではまだ使えるもののサポートの打ち切りが明言されています。
> PHP+MSSQLで使う分には多分一番高機能なのが泣かせますが。。
> このDBクライアントはユニコードに対応していないので、強制的にこのクライアントが
> 存在するWindowsのコードページ(つまりWebサーバのコードページ)である
> SJISに変換されます。他言語版Windowsだったら多分他のになるでしょう。
> この辺はカラムの照合順序を変えるとSJIS以外の文字コードに変換されることも
> あるので、実装が謎だったりしますが。
> インド系の照合順序にしてみたら、DB-Libraryはユニコード対応してないから
> 無理だよ的エラーが出たりもしました。
>
> ODBCはバージョンによるもののユニコードに対応しているんですが、PHP側の
> ODBCドライバがOSのコードページをそのまま申請しちゃうのかな?
> DB-Libraryと同じようにSJIS変換がかけられてしまい、どうにもダメでした。
> ODBCの設定で文字コード変換を無効にしてもだめですね。
>
> SQL Server 2005 Driver for PHP CTPは結局試さなかったんですが、すでに
> お試しになってるようですね。
> PHP+MSSQLでのまともなデータベースクライアントが風前の灯って感じだったので、
> これには少々期待してるんですが、更新されるのかなあ。。
> DATETIME型まだ使えないらしいですが。
>
> MSSQL関数の説明ページには、文字コードの強制変換の問題を回避するやり方
> として、バイナリを利用するやり方がコメントの形で解説されています。
> ADOdbのADOドライバ(ラッパー)は軽く見た感じ最小限度の機能が用意されている
> 程度で不安を感じないでもなかったので、そちらのやり方も参考にしておくと良いかも
> しれません。
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33238] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by kanonbell :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

こんばんは。

> 以前に標記タイトルでお力をお借りして解決したのですが、
> kanonbellさまにお教えいただいた方法で試してみたところ、
> うまく中国語が抽出できませんでした。

あんれ〜?
と思ったら

> $db = &ADONewConnection("ado_mssql");
> $db->charpage = 65001; // UTF-8

正解はこちらでした。
$db->charPage = 65001;
Pは大文字です。私が間違ってますね。
会社で確認して、メールは家で出してるので。。。ごめんなさい。
(ちなみに公式マニュアルも間違って記述しています)

CP_UTF8って定数はPHP自体が持っているので、
$db->charPage = CP_UTF8;
でも可能です。

Driversフォルダにドライバ(ラッパー)の本体があるので、そちらを見ると
どういう実装になってるか分かるので、軽く目を通しておくと良いかもしれ
ません。
ADOdbは結構使いやすいですが、クォート処理など一部安全ではないと
思われる処理も見受けられるのでご注意の程を。

Prepared Statement使うなら、ADOのパラメータコレクションにきちんと
値渡した(エミュレーションではない)ちゃんとした実装になっているので、
まあ大丈夫だとは思うのですけれど。
(なぜかMSSQL関数使うほうではエミュレーションしてたりする)
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33239] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

kanonbellさま

ありがとうございます。

ラッパークラスにも目を通しましたし、
charpageプロパティの存在にも気づいてましたが、
試さずにメールしてしまい申し訳ございません。

自前でクラスを作成するよりも
出来合いのクラスを使用した方が効率が良いですので
今回はADOdbを使用できないものかと思っております。

明日、会社にてご教授いただいた方法で確認してみます。

kanonbell wrote:

> こんばんは。
>
> > 以前に標記タイトルでお力をお借りして解決したのですが、
> > kanonbellさまにお教えいただいた方法で試してみたところ、
> > うまく中国語が抽出できませんでした。
>
> あんれ〜?
> と思ったら
>
> > $db = &ADONewConnection("ado_mssql");
> > $db->charpage = 65001; // UTF-8
>
> 正解はこちらでした。
> $db->charPage = 65001;
> Pは大文字です。私が間違ってますね。
> 会社で確認して、メールは家で出してるので。。。ごめんなさい。
> (ちなみに公式マニュアルも間違って記述しています)
>
> CP_UTF8って定数はPHP自体が持っているので、
> $db->charPage = CP_UTF8;
> でも可能です。
>
> Driversフォルダにドライバ(ラッパー)の本体があるので、そちらを見ると
> どういう実装になってるか分かるので、軽く目を通しておくと良いかもしれ
> ません。
> ADOdbは結構使いやすいですが、クォート処理など一部安全ではないと
> 思われる処理も見受けられるのでご注意の程を。
>
> Prepared Statement使うなら、ADOのパラメータコレクションにきちんと
> 値渡した(エミュレーションではない)ちゃんとした実装になっているので、
> まあ大丈夫だとは思うのですけれど。
> (なぜかMSSQL関数使うほうではエミュレーションしてたりする)
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 33240] Re: PHP5+MSSQLSERVER2005での中国語の取得について

by "成田 実" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

kanonbellさま

おはようございます。
早速ご指摘いただいた通りに修正してみたところ
無事、中国語が正しく抽出できました。

本当にありがとうございました。


成田 実 wrote:

> kanonbellさま
>
> ありがとうございます。
>
> ラッパークラスにも目を通しましたし、
> charpageプロパティの存在にも気づいてましたが、
> 試さずにメールしてしまい申し訳ございません。
>
> 自前でクラスを作成するよりも
> 出来合いのクラスを使用した方が効率が良いですので
> 今回はADOdbを使用できないものかと思っております。
>
> 明日、会社にてご教授いただいた方法で確認してみます。
>
> kanonbell wrote:
> > こんばんは。
> >
> > > 以前に標記タイトルでお力をお借りして解決したのですが、
> > > kanonbellさまにお教えいただいた方法で試してみたところ、
> > > うまく中国語が抽出できませんでした。
> >
> > あんれ〜?
> > と思ったら
> >
> > > $db = &ADONewConnection("ado_mssql");
> > > $db->charpage = 65001; // UTF-8
> >
> > 正解はこちらでした。
> > $db->charPage = 65001;
> > Pは大文字です。私が間違ってますね。
> > 会社で確認して、メールは家で出してるので。。。ごめんなさい。
> > (ちなみに公式マニュアルも間違って記述しています)
> >
> > CP_UTF8って定数はPHP自体が持っているので、
> > $db->charPage = CP_UTF8;
> > でも可能です。
> >
> > Driversフォルダにドライバ(ラッパー)の本体があるので、そちらを見ると
> > どういう実装になってるか分かるので、軽く目を通しておくと良いかもしれ
> > ません。
> > ADOdbは結構使いやすいですが、クォート処理など一部安全ではないと
> > 思われる処理も見受けられるのでご注意の程を。
> >
> > Prepared Statement使うなら、ADOのパラメータコレクションにきちんと
> > 値渡した(エミュレーションではない)ちゃんとした実装になっているので、
> > まあ大丈夫だとは思うのですけれど。
> > (なぜかMSSQL関数使うほうではエミュレーションしてたりする)
> > _______________________________________________
> > PHP-users mailing list  PHP-users@...
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3