問題タブ [utf8mb4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Php + Mysql (UTF-8) 一部の文字はまだバグです
さて、Steam Web API からニックネームを取得し、それらを mysql データベースに挿入する php スクリプトを取得しました。それらの多くは、珍しいロシア語とギリシャ語の文字を取得しました. 私はphp.iniとすべてのphpファイルでphpをutf-8に設定しました
PDO コネクタが utf8 を処理するように構成されている
私のmysqlデータベースはutf8mb4で適切に構成されています
簡単に言うと、web-api の入力を受け取り、uft8_encode() でエンコードします。次に、それをデータベースに挿入します。問題は、一部の文字が適切にエンコードされておらず、データベースからそれらを思い出すと、すべてバグが発生していることです。
例 1:
1.入力 ->
2.エンコード -> ÐеÑÑанÑкий ÑеÑÑовÑки
3.DBに挿入
4.DBから選択 -> Ð?еÑ?Ñ?анÑкий Ñ?еÑ?Ñ?овÑкÐ
5.デコード
6.出力 -> �?е�?�?анский �?е�?�?овск�</p>
例 2:
1.入力 -> $ |/| 1 ↓_ € ♥ J
2.エンコード -> $ |/| 1 â_ ⬠⥠J
3.DBに挿入
4.DBから選択 -> 1 â??_ â?¬ â?¥ J
5.デコード
6.出力 -> 1 �??_ �?� �?� J
mysql - mysql サーバーの文字セットを utf8 から utf8mb4 に更新しようとするとリスクはありますか?
データベースまたはテーブルまたは列の文字セットを utf8mb4 に変更することを含めます。ありがとう!
php - utf-8 / utf8mb4 の問題を回避するために、SQL ステートメント全体を utf8_decode しても問題ありませんか?
ユーザーからのフォームベースの入力を受け入れ、mysql(i) データベースに格納するサイトがあります。ユーザーの 99% はアメリカ出身です。
ユーザーがモバイル デバイスを使用していて、フォーム フィールドの 1 つで絵文字を使用するのが楽しいと判断した場合、UPDATE または INSERT を試行すると、結果の SQL によってエラーが発生します。これは、絵文字が utf-8 の外部にあるためであり、UX と DB の間のエンコーディングの不一致が原因です。根本的な問題を理解していると思います。
私は mysql 5.5 を使用しているので、実際には utf8mb4 文字セットをサポートできますが、それを実現するにはしばらく時間がかかります。
それまでの間、これを(PHPで)行うだけで問題ありませんか/安全ですか?
では、単純に SQL ステートメント全体を強制的に utf-8 にしますか? 絵文字やその他の文字が「?」に変換されることがあります。-- ただし、ステートメント自体が壊れていないか、ユーザーからの通常のテキスト入力が失われない限り、これで問題ありません。
テーブルのスキーマを utf8mb4 で動作するように変換できるようになるまでの一時的な修正として、このアイデアに何か問題はありますか?
編集: データベースから返されるエラーは次のようになります。
java - Java から MySQL への Twitter テキスト: utf8mb4 SQL エラー "reportcharsetnr("
コンテキスト: Twitter テキストを MySQL DB にロードしようとしています。一部のツイートには、 java.SQL.Exceptionutf8mb4
をスローする文字が含まれています。私はこれを解決し、この投稿に感謝します。
これで、Java コードはエラーなしで実行されます。ただし、select * from test.tweet
テーブルで単純な操作を実行できません。
次の SQL エラーが発生します。
エラーコード: 0 45) . 報告してくださいcharsetnr (
SQL コード:
Javaコード:( これが機能することはわかっています)
このエラーについてインターネット上には何もありません。このエラー メッセージを照会できない理由を教えてください。
エラーコード: 0 45) . 報告してくださいcharsetnr (
mysql - mysqldump で UTF8mb4 データを保存するには?
mysqldump を使用して、UTF8MB4 データを含む UTF8MB4 列を含むデータベースをダンプしています。この.sql
ファイルを UTF8MB4 をサポートする新しいデータベースにインポートすると、すべての UTF8MB4 文字が に変換され????
ます。MySQL とインポートを UTF8MB4 で動作させる方法について手がかりを得た人はいますか?
php - PHP を使用して mysql に挿入するときの文字列値が正しくない
PHP を使用して MySql 5.6 DB に挿入すると、「不正な文字列値」というエラーが表示されます (v5.5 を含む複数のサーバーから複数のバージョンの PHP を試しました - すべての Windows マシン)。
私はフォーラムを精査し、すべてを試しましたが、これを理解できないようです! 以下、詳細です。シンプルなものが欠けていることを願っています。すべてのヘルプが大歓迎です。前もって感謝します!
================================================== ===================
現在の MySQL 5.6 構成(関連部分):
サーバー設定の検証:
データベースステートメントを作成します(これは、この問題を解決するために厳密に作成したテスト DB です):
テーブル ステートメントの作成:
テスト/サンプル PHP コード: (1 つのメモ - PDO または MySQLi を使用する必要があることはわかっています。現在、移行/アップグレードを進めていますが、多くのレガシー コードがあるため、当面の間、この問題を解決する必要があります。 / 現在非推奨の mysql 関数を使用する短期)。
エラーが返されました
正しくない文字列値: 行 1 の列 'testcol' の '\xB7 middle dot insert'
……またよろしくお願いします。
================================================== ================
編集 RE: 重複した質問: 提案された重複した質問/回答UTF-8 を最後まで確認しましたが、何が欠けているのかわかりません (明らかに何かが欠けているに違いありません!!)。
より具体的には (参照された投稿によると)、私の「データ ストレージ」は utf8mb4 であり、私の「データ アクセス」は mysql_set_charset を使用しています。実際にこれらの文字を「出力」しようとはしていません (少なくとも、ここでは私の問題ではありません)。 /SQL クエリはハードコードされているため、この問題はデータの「入力」には関係ありません。そして最後に、「その他の考慮事項」に関して、私は文字列関数を使用していないので、私が知る限り問題にはなりません。
繰り返しになりますが、フィードバックは大歓迎です。ありがとう。
mysql - MySQL で絵文字を検索する
次のような文字列があります。
ここで、アプリがこの文字列を utf8 mysql データベース列に押し込むと、MySQL CLI では次のようになります。
私が選択した場合、convert(mystring using utfmb4)
それはまだこのように見えます。
を使用して16進数にするselect hex(mystring) from mytable;
と、次のようになります。
C3A2CB9CE282ACC3AFC2B8C28FC3B0C5B8C592CB86C3B0C5B8C592C5A0C3B0C5B8C592C281C3B0C5B8E280A1C2ACC3B0C5B8E280A1C2A7
ここで、その絵文字の波が含まれる文字列を見つけたいとしましょう。さて、波の絵文字の 16 進数は ですF09F8C8A
。しかしF09F8C8A
、上のヘックスにはないため、次のようなものselect * from mytable where hex(mystring) like '%F09F8C8A%';
は機能しません。
助言がありますか?