Mydatabaseテーブルにラテン語の文字を表示させるのに問題があります。 (ã、õ、á、é、í、…)。 Apache2.4.9とMySQL5.6.17でWAMPサーバーを使用しています。
HTMLで作成した単純なフォームがあり、PHPコードウィッチがクエリを実行してアカウントを作成します。PHPコード:
include('config.php'); //My database data for connection
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
$execute_query = mysqli_query($connection, $query);
if($execute_query) {
//Creates the account
}
else {
//If an error occures
}
}
たとえば、次のアカウントを作成します。
Username: Luís
Password: 1234
E-mail: [email protected]
表を確認すると、作成されたアカウントが表示されますが、ユーザー名にはLuísではなくLuÃsと表示されます。
私が試したこと:
Creating a DataBase and Table with:
utf8_general_ci
utf8_unicode_ci
utf8mb4_general_ci
utf8mb4_unicode_ci
latin1_swedish_ci
それらのどれも機能しませんでした、それは常にíの代わりにÃを示します。
include('config.php'); //My Database data for connection.
//Connection set with $connection = mysqli_connect($mysql_Host, $mysql_user, $mysql_pass, $mysql_db)
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$connection->query("SET NAMES utf8"); //FIXED (Gets $connection from config.php and runs the query "SET NAMES utf8")
$query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
$execute_query = mysqli_query($connection, $query);
if($execute_query) {
//Creates the account
}
else {
//If an error occures
}
}
@JakeGouldが私を助けてくれてありがとう、結局私はデータベーステーブルに問題がなかった。私のデータベースとテーブルは、CHARSET = utf8とCOLLATE = utf8_unicode_ciで設定されました。
Mydatabaseテーブルにラテン語の文字を表示させるのに問題があります。 (ã、õ、á、é、í、…)
これには、HTMLフォームデータ、PHPファイル、およびMySQLの間のエンコーディングの不一致の兆候がすべてあります。問題はHTMLフォームとPHPファイルはUTF8データを送信しています(UTF8は現在のデフォルトのエンコード方法であるため)。MySQLデータベースは(デフォルトで)latin1_swedish_ci
エンコードを使用するように設定されています。
つまり、これは、理論的にHTMLとPHPファイルをlatin1_swedish_ci
に変更できる、「6つのうち6つ、もう1つは6つ」」の問題の1つです。今日のインターネットの世界とWeb開発の世界ではかなり退行的です。
したがって、データチェーン全体 —HTMLフォームからPHP、MySQLデータベースまで)がすべてUTF8であることを確認することをお勧めします。UTF8ですべてを取得したら、人生はたくさんの理由でとても楽です。
この問題が発生する理由は、(デフォルトで)ほとんどのMySQLインストールが新しく作成されたデータベースに対してlatin1_swedish_ci
ではなくutf8_general_ci
を設定するためです。ですから、あなたはそれを修正しようとして正しい方向に進んでいます。
ただし、MySQLデータベース(および与格サーバー)を文字エンコード(この場合はUTF8エンコード)を適切に処理するように設定するには、複数のことを行う必要があります。
まず、データベースの照合順序を変更して、再試行してください。
ALTER DATABASE [name of your database] CHARACTER SET utf8;
これが特定のテーブルである場合、照合順序は次のように変更できます。
ALTER TABLE [name of your table] CONVERT TO CHARACTER SET utf8;
そして、それがテーブルの特定の列である場合:
ALTER TABLE [name of your table] MODIFY [name of your column] [other settings] CHARACTER SET utf8 COLLATE utf8_general_ci;
または、現在のデータベースをエクスポートし、このコマンドを使用して新しいデータベースを作成し、データを再インポートすることもできます。
CREATE DATABASE [name of your database] CHARACTER SET utf8 COLLATE utf8_general_ci;
また、問題が発生したマシンへのMySQLインストールに永続的な変更を加えたい場合は、my.cnf
に移動して編集してください。以下は、チェーン全体をUTF-8に設定します。
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8