JustAnswer のしくみ:
  • 専門家に質問
    知識豊富な専門家があらゆる質問にお答えするために常に待機しています。
  • 専門家が丁寧に対応
    E メールやサイト内オンラインメッセージなど、さまざまな手段で回答を通知。必要に応じてフォローアップの質問をすることもできます。
  • 満足度 100% 保証
    専門家からの回答を確認し評価をすることで、支払うかどうかを決めます。
SOKOKARAに今すぐ質問する
SOKOKARA
SOKOKARA,
カテゴリ: オペレーティングシステム
満足したユーザー: 57
経験:  代表 at SOKOKARAソリューション
104176561
ここに オペレーティングシステム に関する質問を入力してください。
SOKOKARAがオンラインで質問受付中

Microsoft SQL Server 2012を使用しています。 Web APP →PHP7.3 →INSERT実行

ユーザー評価:

Microsoft SQL Server 2012を使用しています。Web APP
→PHP7.3
→INSERT実行
→SQL実行時のエラーは無しこの状態で不定期に文字化けが生じ、その文字化けする文字は特定されない(何かわからない)状態で非常に困っています。わかっていることは、PHPからdblibでの接続(PDO)で行っていること、SQL Serverは2012、該当フィールドはvarcharのフィールド、エンコードはPHP(UNICODE)からSQL実行時(MS932)でエンコード後に登録していることです。function toUTF8($sjis) {
if (ENV == "windows")
return $sjis;
else
// return mb_convert_encoding($sjis, "UTF-8" , "Shift-JIS");
// return mb_convert_encoding($sjis, "UTF-8" , "SJIS");
return mb_convert_encoding($sjis, "UTF-8" , "MS932");
}
function toSJIS($utf8) {
if (ENV == "windows")
return $utf8;
else
// return mb_convert_encoding($utf8, "SJIS");
return mb_convert_encoding($utf8, "MS932", "UTF-8");同じ環境が会社にありますが、この環境では一度も再現せず、お客様環境では不定期(同じ動作、同じデータを登録しても、出るときと出ない時がある)という事になります。チェックポイントはどこでしょうか?
テーブルの参照順序はJapanese_CI_ASになっています。※もう古い資産をそのまま使用しているのでバージョンの違いで不具合が生じる可能性もあると言う事は考えています。
文字化けはDBに格納時になります。

お世話になります。ご質問お応えいたします。

SQLServer2012の照合順序がJapanese_CI_ASということですが、

(ご質問にはテーブルの参照順序とありますが、データベースの照合順序かと思います。)

ファンクションの内容からすると、MS932ではなく、SJISに変換して

SQLServerに入れなくてはJapanese_CI_ASコード体系とは齟齬が出ます。

つまりSJIS以外の文字コードをSQLServerに入れても文字化けの結果になります。

一番簡単な対策は、SQLServerのデータベースプロパテイにある

データベース照合順序をJapanese_Unicode_CI_ASなど、UNICODE体系に変更することです。

宜しくお願い致します。

SOKOKARAをはじめその他名のオペレーティングシステムカテゴリの専門家が質問受付中

オペレーティングシステム についての関連する質問