私は mysqli とそのすべてのエキサイティングなことについてもっと学ぶ道を進んでいますが、すぐにブロックされます。
Debian ボックスにローカル サーバーがあります。最新で、php と mysql がインストールされており、スムーズに動作しています。私はmysqliについてもう少し学びたいと思っていたので、次のコードを試してみました:
<?php
$db = new mysqli('localhost', 'userdb', 'pwuserdb', 'db');
if(!$db->set_charset('utf-8')) {
printf("Error setting the character set utf-8: %s\n", $db->error);
} else {
printf("Current character set is: %s\n", $db->character_set_name());
}
print_r($db->get_charset());
?>
驚いたことに、ページにアクセスすると、次のメッセージが表示されました。
Error setting the character set utf-8: Can't initialize character set utf-8 (path: /usr/share/mysql/charsets/) stdClass Object ( [charset] => latin1 [collation] => latin1_swedish_ci [dir] => [min_length] => 1 [max_length] => 1 [number] => 8 [state] => 801 [comment] => cp1252 West European )
mysql の標準文字セットとして utf-8 を設定しなかったので、論理的であると考えたので、my.cnf ファイルで次の設定を完了しました。
為に[mysqld]
default-character-set=utf8
為に[client]
default-character-set=utf8
また、コマンドラインからmysqlにログインして実行しました
ALTER DATABASE db CHARSET=utf8;
コマンドラインから mysql と apache もリロードしました。mysql で何が起こっているかを見ると、ほとんどすべてが問題ないように見えます。
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
しかし、mysql が utf8 ファイルを見つけられないように見えるためutf8.xml
、フォルダー内のファイルを確認しましたが、ファイル/usr/share/mysql/charsets/
がありません。このディレクトリの下のIndex.xml
ファイルには、文字セットのリストにutf8の言及がありますが、ディレクトリにxmlファイルがないことが問題の原因であると思います。
参考までに、私のシステム ロケールはすべて UTF8 (en および pl) であり、このディレクトリまたはその内容をまったく調べていないため、utf8.xml ファイルがディレクトリにない理由がわかりません。
アイデア/アドバイス/推奨事項は大歓迎です。
前もって感謝します!
乾杯!