前提・実現したいこと
PHP(laravel)の初心者で、素朴な問題で申し訳ございませんでした。
既存のサーバーにあるsqlanywhereのデータベースから抽出する際に、
カラム名はすべて文字化けになっています。
環境:windows10 + PHP 7.3 + xampp + laravel4.1.1
extension josueneo/laravel5-sqlanywhereを使おうとしたが、
PDO Driverがないというエラーがあったため、現在はODBCで接続しています。
既存のデータベースのカラム名はすべて漢字で、変更できないため、
下記のように抽出したら、カラム名が文字化けになってしまいます。
array(30) {
[0]=>
array(5) {
["SEQ"]=>
string(3) "721"
["���ЃR�[�h"]=>
string(2) "11"
["EDI�f�[�^�L���敪"]=>
string(1) "2"
["���[���f�[�^�L���敪"]=>
string(1) "0"
["�o�^��"]=>
string(26) "2021-03-02 00:00:00.000000"
}
エンコードの問題だと思いますが、抽出したデータは、
mb_convert_encoding($value,"UTF-8","SJIS")で変換すれば、正常に表示は可能です。
しかし、SQLの中、where(カラム名,'=',???)で絞ることはできなく、
毎回、すべてのデータを抽出しなければならないので、非常に遅いです。
ODBCの設定がおかしいでしょうか。
何か解決策がありませんか。
発生している問題・エラーメッセージ
Illuminate\Database\QueryException
odbc_prepare(): SQL error: [SAP][ODBC Driver]�\���G���[�܂��̓A�N�Z�X�ᔽ�ł��B, SQL state 42000 in SQLPrepare (SQL: select * from "W_HATUF_CSV" where "EDIデータ有無区分" = 0)
該当のソースコード
$items=DB::connection('odbc') ->table('W_HATUF_CSV') ->where('EDIデータ有無区分','=',0) ->get(); var_dump($items);
試したこと
①database.phpでDSNのエンコードを変更して、追加してみたが、効果がない
'odbc' => [
'driver' => 'odbc',
'dsn' => 'DSN=Seisan2;UID=dba;Integrated=NO;Host=192.168.0.2',//;Charset=SJIS
'database' => 'DBA',
'host' => '192.168.0.2',
'username' => 'dba',
'password' => 'sql',
// 'charset' => 'utf8',
],
②検索したいカラム名をあえてUTF-8からSJISへ変換して、whereの中に入れたら、
Illuminate\Database\QueryException エラー:
Stack trace表示:
protected function runQueryCallback($query, $bindings, Closure $callback)
{ try { $result = $callback($query, $bindings); } catch (Exception $e) { throw new QueryException( $query, $this->prepareBindings($bindings), $e ); } return $result; }
補足情報(FW/ツールのバージョンなど)
sqlanywhere管理ツールSQL Central または A5:SQL Mk-2でデータベースをアクセスしたら、普通に表示できます。
あなたの回答
tips
プレビュー