PHP クエリ MSSQL の問題。

WBOY
リリース: 2016-06-23 13:49:24
オリジナル
1471 人が閲覧しました

MSSQL では、フィールド名は NAME、フィールドの内容は中国語、フィールド タイプは VACHAR(50)、並べ替えルールは次のとおりです: SQL_Latin1_General_CP1_CI_AS (これは変更できません)

PHP は SQL に接続し、他の関連するメソッドを通じて NAME をクエリします内容を確認すると、中国語は正常に表示されますが、NAME をクエリすると、エンコーディングを変換する必要がありますか?

例: select * from username where id=123
は名前を Zhang San として表示できます

しかし、その逆: select * from username where name=Zhang San
は見つかりません。

並べ替えルールを変更できることはわかっていますが、他の場所を変更するとコードが文字化けします。したがって、並べ替えは変更できません。


ディスカッションに返信(解決策)

select * from username where name='Zhang San'

同じように、一重引用符の問題ではありません。

まず第一に、SQL コマンドに構文エラーがないことを確認する必要があります
その後、有効な書き込みメソッドを検出できます

条件の文字セットを 1 つずつ変更すると、成功する可能性があります

SQL_Latin1_General_CP1_CI_AS
は最初のヨーロッパ文字セット Set (シングルバイト) で、理論的にはすべての文字をカバーできます
しかし、実際には内部文字セット変換があり、通常マルチバイト文字セットをサポートできるかどうかが問題です

覚えています以前、勉強していたときにmysqlを使ってデータベースを構築したのですが、プロジェクトを書くときは保存できるのですが、後で変換したいと思いました。データを utf8 に変換しましたが、変換するとデータベースはすべてラテン語になってしまいました。 。その時は単なる練習プロジェクトだったので、もう気にしませんでした。プロジェクトに一貫したコードを保存しておかないと、将来面倒になります。

奇妙なことに、テーブル内の他のコンテンツを通じて中国語名をクエリすると、出力は正常に表示されますが、中国語名を直接検索することはできません。
NAME フィールドに格納されているコンテンツ ÖÐÎÄ (中国語) ËÑË÷ (検索) この文字化けした SQL クエリをクエリできます

他のコンテンツから見つかった名前を Base64 でエンコードして投稿します
たとえば、生産情報からのものname フィールドは $name に保存されます。
echobase64_encode($name); だけです
結果を投稿します

gbk 環境には

header('Content-type: text/html;charset=utf-8');echo utf8_encode('中文'); //ÖÐÎÄecho utf8_encode('搜索'); //ËÑË÷
ログイン後にコピー
ログイン後にコピー
があります

他のコンテンツから見つかった名前を Base64 でエンコードして投稿します
たとえば出力メッセージの名前フィールドは $name に保存されます。
echobase64_encode($name);
結果を投稿してください

gbk 環境には

header('Content-type: text/html;charset=utf-8');echo utf8_encode('中文'); //ÖÐÎÄecho utf8_encode('搜索'); //ËÑË÷
ログイン後にコピー
ログイン後にコピー
があります



素晴らしいご返信ありがとうございます。

$str=utf8_encode('中文');echo $str;echo base64_encode($str);$r=mssql_query("select *  from users  where Name='".$str."'");
ログイン後にコピー


「中国語」という単語がクエリ用の SQL ツールに変換されてコピーされたことが示されていますが、なぜそれが php で見つからないのでしょうか。

まず phpmyadmin で SQL ステートメントを試してください。

select * from username where id=123 ではありません
名前を Zhang San として表示できます
name の値の Base64 エンコーディングを投稿するように依頼しました

あなたは select * from username where id=123 ではありません
名前をZhang Threeとして表示できます
nameの値のbase64エンコードを投稿してもらいました



この方法で、中国語も正常に表示できます
中文 的BASE64 1tDOxA==搜索 的BASE64 y9HL9w== 
ログイン後にコピー

Base64エンコード文字列はどうやって取得しましたか?
echobase64_encode('中国語'); のようなものではありませんよね?

いいえ。結果を確認してみたところ、
php のクエリ文:

$r=mssql_query("select *  from users where denglu=1");
ログイン後にコピー
ログイン後にコピー

クエリ結果は直接 BASE64:
base64_encode($row[1])
ログイン後にコピー
ログイン後にコピー

Base64 エンコード文字列をどのように取得しましたか?
echobase64_encode('中国語'); のようなものではありませんよね?



いいえ。結果を確認しました。
php のクエリ ステートメント:
$r=mssql_query("select *  from users where denglu=1");
ログイン後にコピー
ログイン後にコピー


クエリの結果は直接 BASE64:
base64_encode($row[1])
ログイン後にコピー
ログイン後にコピー


モデレーター、ご都合がよければ QQ 経由でリモートでお見せできます

エンコードの問題、あなたのphp のデフォルトのエンコーディングは一貫性がありません。mysql に渡される値は「Zhang San」ではありません。もちろん、クエリすることはできません。

php header("Content-type: text/html; charset=latin1");エンコーディングの問題、php のデフォルトのエンコーディングが矛盾しています。mysql に渡される値は「Zhang San」ではありません。もちろんクエリできません。

php header("Content-type: text/html; charset=latin1") を試すことができます。 ;


我已经把php编码改成UTF8了。语句输出也是:

select * from server01.dbo.cabal_character_table where name='ÖÐÎÄ' //在数据库里的显示和这个一样,在sql工具直接执行此命令可以搜索到,这个是UTF8编码后的字符,原文是:中文
ログイン後にコピー

where name='ÖÐÎÄ'

你这个乱码值,在数据是否是乱码的?

where name='ÖÐÎÄ'

你这个乱码值,在数据是否是乱码的?



是的,数据库里查询出来就是这样。



我在想mssql有没有什么转换语句,能在查询的时候把列名的数据类型转换一下。例如:

select 这里转换NAME为16进制或者CHAR from name where name= 这里把字符转换成16进制或者CHAR
ログイン後にコピー

我比较好奇的是,为什么通过其他列名例如name=张三 id=1,通过查询id=1,php查询出来能正常转换成中文,反过来却不行,

php默认设置GB2312, mssql是GBK,name这列是varchar(50)存储方式是ISO-8859-1

首先你要解决数据库内容乱码的问题,乱码解决了,下一步就是读取读取数据编码问题。

首先你要解决数据库内容乱码的问题,乱码解决了,下一步就是读取读取数据编码问题。



数据库乱码没法解决。不在我控制范围。只有想办法读取,实在不行就算了。

你存进去的时候是以utf8或者gbk的编码格式存进的中文
以latin1编码保存
你取出来的时候以utf8或者gbk的形式取,当然得到的是正确的中文
如果你以latin1编码取,取的就是数据库里存的乱码,应该完全一致.
如果你想通过数据库操作来查询中文,你应该查询的是gbk转latin1的那段编码
比较无聊...iconv好像不能转utf8的中文到ISO-8859-1//IGNORE
个人觉得没什么意思...看你自己了...这样转来转去也不可能用什么模糊搜索
数据存成这样 可够操作的方向非常少

你试试直接在数据库里运行select * from username where name='张三',应该可以运行出来呀

改下连接库编码呗,UTF8

自己已经解决了。结贴了。感谢各位的热心回答和帮助!谢谢你们!!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート