MariaDB领域的有趣问题

时间:2016-05-01 14:50:51

标签: mysql mariadb utf

我正在尝试保存一些前缀为货币符号的值,例如€10。然而,当我在数据库中手动输入时,欧元符号会立即转为?然后,当我查询该行时,我有时会再次获得带有值的问号,以及其他一些时间NaN的全部值。 如果我使用电子邮件字段或唯一标识符查询该行,则问题会更改。使用$或®代替€表示没有问题;然而,即使是转向?,

奇怪的是,如果我尝试用原始字符替换问号,MariaDB会抱怨该行没有变化,就好像该字符实际存在即使没有显示!

我尝试重新启动MariaDB,以防万一,但问题仍然存在。 我使用UTF32进行编码,使用utf32_unicode_ci进行整理。 我正在用Sequel_pro测试这个东西,甚至没有触摸php也不会堆叠东西。 无论如何,如果我从php脚本执行查询并使用JSON解析结果,我会为该值获取null。

这些特殊字符会出现什么问题?

1 个答案:

答案 0 :(得分:0)

计划A:将金额存储为字符串,然后尝试从中获取值。正如已经提到的,这需要" utf8一直贯穿"。

计划B:仅将金额存储在数字字段中。要么存储货币'在另一个领域作为' EUR'或者' USD'或者......或者简单地假设所有金额都是欧元。然后在打印时将欧元符号放在金额前面。

请勿使用DOUBLEFLOAT,否则会产生不合理的额外舍入。相反,请考虑DECIMAL(11,2)。这将完全处理大多数国家的金额。 (少数国家需要4位小数;有些国家可以使用0。)

不要使用utf32;使用utf8(或utf8mb4)。

数据库是数据的存储库,而不是格式化工具。保持这种区别将有助于避免这样的问题。