ホームページ > バックエンド開発 > PHPチュートリアル > emoji - thinkphp mysql 指定された文字エンコーディングを使用して指定されたテーブルをクエリおよび操作するにはどうすればよいですか?

emoji - thinkphp mysql 指定された文字エンコーディングを使用して指定されたテーブルをクエリおよび操作するにはどうすればよいですか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-08-10 09:07:14
オリジナル
1248 人が閲覧しました

問題は次のとおりです:
多くのテーブルと多くの既存データを含むデータベースがあり、これらのデータのほとんどは utf8 に保存されています (すべてではなく、latin1 もあります)。
ユーザーが絵文字を保存できないという問題が発生しました。正しく保存するには utf8mb4 が必要であることがわかっています。

Mysql が 5.1 から 5.6.26 にアップグレードされました。次の考えと既存の試み:
1. データベース全体が uft8mb4 に更新されると、さまざまな呼び出し場所が乱雑になり、メンテナンスが不十分になるため、リスクが大きすぎます。 utf8mb4 に直接変更すると、システム全体が正常に動作しなくなる可能性があります。 。

2. ユーザーが絵文字を保存できるテーブル (以下、テーブル E) のみを uft8mb4 に更新することを検討します。 ただし、ここでのシステムは thinkphp で記述されており、エンコーディング設定は config.php に配置されます。これ、thinkphp それはすべて破壊されました。

3. 2. を考慮すると、thinkphp の本体は引き続き uft8 を変更せずに使用し、この テーブル E をクエリするときに一時的にのみ uft8mb4 を使用します。試してみてくださいM()->query('SET NAMES 'utf8mb4'');结果报错:SQLSTATE[HY000]: General error

4. 方法 2 はまだ検討中ですが、うまくいきません。このテーブル E のクエリが成功した後でも、他のテーブルに対する操作が実行され、uft8mb4 が後続のクエリでエラーを引き起こす可能性があるためです。

他のテーブルの操作に影響を与えずに、このテーブルでのみ utf8mb4 をエンコードする操作を実行する良い方法はありますか?

追記: 運用環境は 1 年間オンラインになっていて、大量のデータとオンライン ユーザーが存在するため、この問題は現在テストでのみ報告されています。データベース全体のコーディングを更新するのは危険すぎます。リーダーのアイデアは、まず落とし穴を埋めて、発見されていない落とし穴は見て見ぬふりをするというものです。
幸いなことに、システムを構築したときに本番環境にインストールしたMySQLは、最初は最新バージョンの5.6.26でした。絵文字を再コーディングする方法が最後の手段としてのみ使用されることを願っています。

返信内容:

問題は次のとおりです:
多くのテーブルと多くの既存データを含むデータベースがあり、これらのデータのほとんどは utf8 に保存されています (すべてではなく、latin1 もあります)。
ユーザーが絵文字を保存できないという問題が発生しました。正しく保存するには utf8mb4 が必要であることが知られています。

Mysql が 5.1 から 5.6.26 にアップグレードされました。次の考えと既存の試み:
1. データベース全体が uft8mb4 に更新されると、さまざまな呼び出し場所が乱雑になり、メンテナンスが不十分になるため、リスクが高すぎます。 utf8mb4 に直接変更すると、システム全体が正常に動作しなくなる可能性があります。 。

2. ユーザーが絵文字を保存できるテーブル (以下、テーブル E) のみを uft8mb4 に更新することを検討します。 ただし、ここでのシステムは thinkphp で記述されており、エンコーディング設定は config.php に配置されます。これ、thinkphp それはすべて破壊されました。

3. 2. を考慮すると、thinkphp の本体は引き続き uft8 を変更せずに使用し、この テーブル E をクエリするときに一時的にのみ uft8mb4 を使用します。試してみてくださいM()->query('SET NAMES 'utf8mb4'');结果报错:SQLSTATE[HY000]: General error

4. 方法 2 はまだ検討中ですが、うまくいきません。このテーブル E のクエリが成功した後でも、他のテーブルに対する操作が実行され、uft8mb4 が後続のクエリでエラーを引き起こす可能性があるためです。

他のテーブルの操作に影響を与えずに、このテーブルのみで utf8mb4 エンコード操作を実行する良い方法はありますか?

追記: 運用環境は 1 年間オンラインになっていて、大量のデータとオンライン ユーザーが存在するため、この問題は現在テストでのみ報告されています。データベース全体のコーディングを更新するのは危険すぎます。リーダーのアイデアは、まず落とし穴を埋めて、発見されない落とし穴は見て見ぬふりをするというものです。
幸いなことに、システムを構築したときに本番環境にインストールした MySQL は、最初は最新のバージョン 5.6.26 でした。絵文字を再コーディングする方法が最後の手段としてのみ使用されることを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート