mysql4.1 以降の問題点について簡単に説明します
まず、mysql4.1 のストレージ方式はすでに utf8 です。 。言い換えれば、そのファイルのエンコーディングは utf8 形式であり、保存できない文字について心配する必要はありません
2 番目: mysql サーバーはエンコーディング方式で起動する必要があります。また、その文字エンコーディングは何ですか?接続 (通信) は、いわゆる通信言語
ですか? 3 番目: mysql のクライアント側は、mysql のサーバー側と通信するためのコードを設定する必要があります。これも通信言語
では、なぜコード化けが発生するのでしょうか?
この接続プロセスでは、中国語しか理解できない人があなたに話しかけていると想像してみてください。それはまさに、小さなツバメが馬に肉を 3 枚与えるようなものです。 。
では、文字化けの問題を解決するにはどうすればよいでしょうか?
いくつかの方法があります:
まず、サーバー側の mysql とクライアント側の mysql をコンパイルするときに同じ文字セットを使用します
./configure --with-extra-charsets=big5,gbk,gb2312,utf8 - - with-charset=utf8
このうち --with-charset=utf8 は、サーバーやクライアントのデフォルトの接続方法でエンコーディングを設定するものです。 もちろん、統一されていれば、さまざまなエンコーディングを使用できます。 。
(これは怖いと思います。--with-charset=gbk を使用しても、日本語などの文字化けは発生しません)
2 つ目は、コンパイル後に設定します。これも機能します。 2 つの方法、設定ファイルを読み取る、またはパラメーターを直接追加します
パラメーターを直接追加する方法について説明します:
以下は、mysql を開始するために使用するサーバー スクリプトです
CODE:
#! /bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/usr/local/soft/mysql4112/bin/mysqld_safe --user=mysql --pid-file =" $rundir"/mysql.pid --datadir="$rundir"/var "$@"-O max_connection
s=500 -O wait_timeout=60 -O key_buffer=32M --port=6000 --socket =" $rundir"/mysql.sock --default-character-set=utf8 &
サーバーによって開始された接続エンコーディングが utf8 であることがわかります。もちろん、次のような他の方法を使用することもできます。 gbk
クライアントでは簡単です
/$mysqlpath/bin/mysql -hxxxx -uxxx -pxxx -P6000 --default-character-set=utf8
はは、mysql 変数に mysql>show が表示されます。 ;
| 文字セット_接続 |
| 文字セット_サーバー | f8
パラメータについて話しましょう
character_set_system | utf8 これはシステムのファイルエンコーディングです。すべて utf8
| これはサーバーの起動時に設定されるエンコーディングです
その他の項目は client-側 接続エンコーディング
次に、my.cnf を介した設定方法について説明します。これもサーバー メソッドとクライアント メソッドに分かれています
コンパイル時に、--sysconfdir= を介して my.cnf の読み取りを設定できます。 /etc ディレクトリ
以下はクライアント側の my.cnf のキックです
[クライアント]
#password = your_password
ソケット = /tmp/mysql.sock
default-character-set=utf8
見ればわかります。はい、サーバー側でも同様ですが、[mysqld] の下にあります。
PHP に問題があります。mysql 接続は、/etc のルート ディレクトリにある設定ファイルを読み取ります。
my-small.cnf
my-medium.cnf
my-huge.cnf
my-innodb-heavy-4G.cnf
は、データベースのサイズに対応する対応する構成ファイルを設定します。これらの設定の違いはサーバー側にのみ影響します。