文字/文字セット/照合に関する問題のチェックリスト
を含むmysql
, mysqli
,PDO
コンテンツ
- 免責事項
- DB 内の挿入が正しく機能しません! 私に何ができる?
- データベースまたはテーブルの文字セットと照合順序を変更する
- スクリプト ファイルのエンコーディングを設定する
- ページの文字セットを php または meta タグで設定します
- UTF8 と UTF8mb4 の違いは何ですか?
- この特定の質問への回答
- 詳細情報/追加リンク
- サイドノート
1.免責事項
この回答は、この質問に答えるだけでなく、回答がもう少し広範である必要があるため、より多くの人がバンドルされた適切な回答をより迅速に見つけることができます!
!重要なお知らせ!
データベースで何かを変更した場合は、常にデータベースのバックアップがあることを確認してください! 2回か3回チェックしてください!
エラー修正など、改善やコメントを受け付けています。
さらに、文法が完璧でない場合はお詫び申し上げます: D
次のような質問に行き詰まった場合:
- Php + Mysql (UTF-8, utf8mb4) 一部の文字はまだバグ
- MySQL データベースの文字セットと照合順序全体を UTF-8 に変換する方法は?
- UTF-8 を MySQL に挿入しようとすると「文字列値が正しくありません」
- my.cnf で MySQL のデフォルト文字セットを UTF-8 に変更しますか?
- php と mysql で utf8mb4 を使用する
- PDO + MySQL と壊れた UTF-8 エンコーディング
- PHP Mysqlの挿入データのエラー
- PHP PDO: 文字セット、セット名?
- MySQLでSET NAMES utf8?
- PHP mysql charset utf8 の問題
- ずっとUTF-8
- PHP を使用して MySQL から utf8mb4 データを操作する
- エラー 1115 (42000): 不明な文字セット: mysql の 'utf8mb4'
...それなら、私の答えが役に立つかもしれません!
2. DB 内の挿入が正しく機能しません。私に何ができる?
挿入が適切に機能せず、挿入されたデータがデータベースで次のようになっている場合、さまざまな理由が考えられます。
例:
??????????
�??_ �?�
â_ ⬠⥠J
以下は、すべてが正しいかどうかを確認するための小さなチェックリストです。(チェックリストの後に、 、および
に関するいくつかの追加情報があります)mysql
mysqli
PDO
チェックリスト:
mysql:
-mysql_query("SET NAMES 'utf8'");
使用するすべてのクエリの前に SET NAMES を実行します。mysql ドライバーが charset のメカニズムを提供していない場合は、SET NAMES を使用する必要があるためです。
-mysql_query("SET CHARACTER SET utf8 ");
文字を utf8に設定します
-mysql_set_charset('utf8');
文字セットを utf8 に設定します
-mysql API ドライバーは utf8mb4 をサポートしていません (エラー 1115 (42000))
-character_set_server=utf8
サーバー文字を設定します
PDO:
- $dbh->exec("set names utf8");
PDO を使用している場合は、この行を使用して SET NAMES を実行できます
-$dbh = new PDO("mysql:host=$host;dbname=$db;charset=utf8");
この行で文字セットを設定しますが、PHP 5.3.6 以降が必要です
-$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ");
この行で SET NAMES を設定することもできます
- mb_internal_encoding('UTF-8');
PDO を使用するときにエンコーディングを設定します
3. データベースまたはテーブルの文字セットと照合順序を変更する
データベースまたはテーブルの文字セットまたは照合順序を変更する必要がある場合は、次のコード行を使用できます。
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
4. スクリプト ファイルのエンコーディングを設定する
あなたのskript(php)ファイルが正しい文字セットで保存されていることを確認する必要があるかもしれません!
このために、Notpad++をお勧めします!
ファイルを notpad で開いた場合は、メニューポイントの「エンコード」に移動し、文字セットを変更します
5. php または meta タグを使用してページの文字セットを設定します
データを utf8/utf8mb4 で表示するには、サイトが正しい文字セットで設定されていることを確認する必要があります!
次の 3 つの方法で文字セットを設定できます。
//PHP
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
//HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
また、フォームで utf8 を受け入れるには、次のようにします。
<form accept-charset="UTF-8">
6. UTF8 と UTF8mb4 の違いは何ですか?
UTF8:
-utf8 は 3 バイトのシンボルのみをサポートします
-...(さらに多く)
UTF8MB4:
-utf8mb3 は 4 バイトのシンボルをサポートします
-...(さらに多く)
7. この特定の質問への回答
私はこれがあなたの使用以来うまくいくはずだと思いますPDO
:
(PDOオブジェクトを作成した後!PHPバージョン5.3.6未満を使用している場合)
$dbh->exec("set names utf8");
それ以外の場合は、次のいずれかを試してください。
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
アップデート:
collation
orcharset
のdatabase
orを変更するには、table
これを使用します。
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
8. 詳細情報/追加リンク
9. 補足事項
9.1 エラー報告
エラーが表示されない場合は、次のコード スニペットを使用します。
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
9.2 Unicode
間違えないように、本当に utf8 を理解する必要があります!
9.3 mysql、mysqli、および PDO への一言
私の個人的なランキングは次のとおりです。
- PDO
- みずい
- mysql
mysql に対して多くの利点があるため、PDO または mysqli を使用することをお勧めします。