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

PHP クエリ MSSQL の問題。

Jun 23, 2016 pm 01:49 PM
mssql php お問い合わせ

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles