2016-05-01 7 views
0

私は€10のような通貨記号を前に付けた値を保存しようとしています。しかし、DBに手動で入力すると、ユーロ記号が今度は入れ替えられますか?ときに私は時々再び値と、いくつかの他の時NaN完全な値の疑問符を得る行を照会する。 電子メールフィールドまたは一意の識別子を使用して行をクエリすると、問題が変わります。 €の代わりに$または®を使用すると問題はありません。しかし、even™は?に変わります。MariaDBフィールドの面白い問題

疑問点は、疑問符を元の文字に置き換えようとすると、表示されていなくてもその文字が実際に存在していたかのように、行に変更がないことをMariaDBが告げることです。

MariaDBを再起動しようとしましたが、問題が残っていました。 私はエンコーディングにUTF32を使用しており、照合にはutf32_unicode_ciを使用しています。 私はSequel_proで物をテストしています。 私はPHPスクリプトからクエリを実行し、結果をJSONで解析すると、値に対してnullが返されます。

これらの特殊文字にはどのような問題がありますか?

+0

データベースにデータを編集するために使用しているツールが、データベースがエンコードされているのと同じ方法でエンコードされていない限り、このような問題が発生します。また、UTF-8はあなたがしたいことに十分ではありませんか? – RiggsFolly

+0

可能な複製http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – RiggsFolly

+0

もう1つの3dはすべてのテーブルの設定を変更するオプションを示していますが、どのようにSequelProでそれを行う。 –

答えて

0

プランA:金額を文字列として保存し、でない場合は、の値を取得してください。これは、既に述べたように、「utf8を完全に」必要とします。

プランB:数値フィールドに金額のみを保存します。別のフィールドに「通貨」を「EUR」または「USD」として保管するか、または単にすべての金額がユーロであると仮定します。あなたがそれを印刷するとき、額の前にユーロ記号を置く。

DOUBLEまたはFLOATを使用しないと、望ましくない余分な丸めが発生します。代わりに、DECIMAL(11,2)を検討してください。それはほとんどの国の金額を正確に処理します。 (いくつかの国で小数点第4位が必要ですが、いくつかは0で生きることができます)

utf32は使用しないでください。 utf8(またはutf8mb4)を使用します。

データベースは、データのリポジトリであり、フォーマットツールではありません。この区別を維持することで、このような問題を避けることができます。

関連する問題