Web ページのエンコーディングは php ファイルで utf-8 に設定されます
header("Content-type: text/html; charset=utf-8");
データベースに渡されるエンコーディングは以前に utf-8 に設定されますデータベースに挿入します
$ this->mysqli->query("set names utf8");
データベースには、文字セットに関連するいくつかの変数が設定されます
クエリ後の結果には、「char%」のような変数が表示されます; は
'collation_%' のような show 変数をクエリします;結果は
WampServer を使用し、mysql 設定ファイル my.ini を変更し、[client] ノードの下にdefault-character-set=utf8 を追加します。 [mysqld] ノードの下のcharacter_set_server=utf8 次に、musql サービスを再起動します
ただし、データベースに渡されると、中国語の文字は疑問符になります。 。コード化けを解決するための設定方法を教えてください。
加えたすべての変更を元の状態に戻します。
注意事項:
1. すべての文字セット関連の設定は、データベース内の既存のデータには影響しません
2. 文字セット関連の設定は、設定後に挿入されたデータにのみ有効です
3. データベース 共有リソースです、安易に設定を変更しないでください。他のアプリケーションで問題が発生しないようにするには
次の 2 点を実行する限り、コードの文字化けの問題は発生しません
1. 中国語のコンテンツが含まれる可能性のあるすべてのフィールドを接続し、中国語の文字セットで校正する必要があります。どの文字セットであっても (gbk、utf8、ucs2 は OK)、すべてのフィールドが同じである必要はありません
2. データベースに接続した後は、毎回 set name pagecharacter set を実行します
データベースの文字を設定しただけです。収集後、データテーブル内の元の文字化けデータを削除してからプログラムを実行すると、挿入された漢字は文字化けしたままです。
練習用にテストデータベースを使用したため、文字セットの設定を変更しました。デフォルトの設定が何なのか、それを復元する方法さえ思い出せません。 。 。
データベースに接続した後、毎回 $this->mysqli->query("set names utf8"); を実行すれば問題ないはずです。
中国語のコンテンツを含む可能性のあるすべてのフィールドは、中国語の文字セットに接続して照合する必要があります。これは、'collation_%' のような show 変数の実行後に表示される結果を指しますか?
始めたばかりなのでアドバイスをお願いします、よろしくお願いします。
データベースに接続するためのツールクラス
<?php class MysqliHelper{ private $mysqli; private static $host = "localhost"; private static $user = "root"; private static $pwd = ""; private static $db = "test"; public function __construct(){ $this->mysqli = new Mysqli(self::$host,self::$user,self::$pwd,self::$db); if($this->mysqli->connect_error){ die("连接数据库失败".$this->mysqli->connect_error); } $this->mysqli->query("set names utf8"); } public function execute_dql($sql){ $res = $this->mysqli->query($sql) or die($this->mysqli->error); return $res; } public function execute_dml($sql){ $res = $this->mysqli->query($sql) or die($this->mysqli->error); if(!$res){ return 0; }else{ if($this->mysqli->affected_rows>0){ return 1; }else{ return 2; } } } }?>
テーブルの文字セットは何ですか?保存結果には影響しないはずです~
テーブルの文字セットは何ですか?保存結果には影響しないはずです~
テーブルの文字セットを確認するにはどうすればよいですか?デフォルトの文字セットを使用しています。変更された構成については、1 階のスクリーンショットを参照してください。
テーブル table name を作成するか、phpmyadmin グラフィカル ツールを使用して表示することができます。
タイプミスです。show create table テーブル名です。
CREATE TABLE `tb_userinfo` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password `varchar(20 ) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=latin1
latin1 ですが、ut f8 に変更するにはどうすればよいですか?
CREATE TABLE `tb_userinfo` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`email` varchar(20) DE FAULT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=latin1
latin1 ですが、utf8 に変更するにはどうすればよいですか
phpmyadmin と入力して変更します
元のテーブルを削除
テーブル tb_userinfo を削除
再作成
CREATE TABLE `tb_userinfo` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar( 20 ) DEFAULT NULL、
`email` varchar(20) DEFAULT NULL、
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8
実際、これを行う必要はありません
接続と校正を変更するだけです
ALTER TABLE `tb_userinfo` CHANGE `username` `username` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
テーブルの文字セットを変更する場合は、フィールドも変更する必要があります。テーブルを削除してからテーブルを再構築できます。
CREATE TABLE `tb_userinfo` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`email `varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8;
データを必ずバックアップしてください。実際、phpmyadmin を使用して文字化けを表示することを気にしない場合は、PHP でデータベースに接続するときに文字セットを設定するだけで済み、データ アクセスには影響しません。 。 。これが正常な場合は、Web サイトで phpmyadmin をハングさせないようにして、問題を避けるためにそのまま使用してください~~
ドロップ後にテーブルを再構築すると、テーブルの文字セットは utf8 になります
ただし、
$sql を使用してください= "insert into tb_userinfo (username ,password,email) names('sss李思','123456','lis@sina.com')";
の場合、挿入後に sss のみが表示されます。純粋な漢字では何も挿入できません。
php ファイルを utf-8 BOM フリー形式で保存します
ついに成功しました、皆さん本当にありがとう。現在、メモ帳で作成したphpドキュメントのデフォルトのエンコードがANSIになっているので練習中です。
でも、毎回こんなに面倒な設定をしなければいけないのでしょうか?
mysqlが中国語対応するのは面倒な気がします。変更する必要のない場所がいくつかあるかもしれませんが、変更したのですが、どの設定を変更する必要があるかわかりません。
my.ini のパラメータを変更する必要はありません (もちろん、テーブルが gbk の場合は gbk になります)。他に、挿入されたデータのエンコーディングがデータベース内のエンコーディングと一致していることを確認する必要がありますか?
Linux でのみ utf-8 を使用できるため、人々は utf-8 を使用します
ウィンドウの下にいる場合、デフォルトは gbk です。utf-8 を使用すると、面倒なことになるのではないでしょうか。
国際化のためにutf-8が使われているという人もいますが、実際のところ、四角文字を理解できる外国人はどれだけいるのでしょうか?
皆様、改めてありがとうございます。