1

状況: アプリケーション A によって管理されているテーブルがあります。アプリケーション A は、1 日を通してテーブルのデータを挿入および更新します。週に 1 回DROP、テーブルを再作成し、すべてのデータを挿入します。

問題: アプリケーション A はテーブルを として作成しますutf8。このテーブルに依存するアプリケーション B は、それが である必要がありますascii_bin。私はどちらのアプリケーションも設計していませんし、要件を変更する権限もありません。

必要なもの: テーブルが にあることを確認する方法ascii_bin。スクリプトを作成し、CRON 経由で実行することを検討しました。これにより、現在の文字セットがチェックされ、必要に応じて設定されます。これを達成するためのより良い方法はありますか?

ALTERは暗黙的な を引き起こすステートメントの 1 つであるため、orのCOMMIT後のトリガーの一部としてそれを行うことはできないと思います。INSERTUPDATE

4

3 に答える 3

0

ascii_binデータベーススキーマのデフォルトの文字セットとして設定できます。次に、別の文字セットを明示的に指定しない限り、作成されたすべてのテーブルにこの文字セットが作成されます。

デフォルトの文字セットを設定する方法については、MySQLのドキュメントを参照してください:http://dev.mysql.com/doc/refman/5.0/en/charset-database.html

于 2012-04-26T12:27:53.310 に答える
0

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.htmlで SET NAME を参照してください。

于 2012-04-26T12:44:23.590 に答える
0

ここでは、 MySQL プロキシが解決策になる可能性があります。

プロキシを通過するときに create ステートメントを書き換えることができます。

または、アプリケーション A から特権を削除して、テーブルを削除できないようにすることもできます。

何も変更しない ALTER ステートメントは、基本的に無視されます。そのため、ascii_bin への変換が複数回実行された場合でも、サーバーの負荷はそれほど大きくなりません。したがって、それを cron に入れるか、Applicatio B が呼び出す既存のストアド プロシージャ、またはその他の巧妙なものに入れることは、それほど悪くはありません。

于 2012-04-26T12:38:04.007 に答える