使用CodeIgniter时MySQL数据库无法正确存储货币符号
问题:MySQL中currencySymbol字段存储为0而非实际符号
我在将数组写入MySQL数据库时碰到了一个棘手的问题:currencySymbol字段始终被存成0,完全不是数组里的实际货币符号,但其他字段的数据都能正常写入。
举个例子,数组里的相关数据是这样的:
[AF] => Array ( [alpha3] => AFG [currencyId] => AFN [currencyName] => Afghan afghani [currencySymbol] => ؋ [id] => AF [name] => Afghanistan ) [AI] => Array ( [alpha3] => AIA [currencyId] => XCD [currencyName] => East Caribbean dollar [currencySymbol] => $ [id] => AI [name] => Anguilla )
解决方法
后来排查出问题根源在字段类型设置上:这个currencySymbol字段被错误地设成了int类型!当尝试把字符串(货币符号)存入整数字段时,MySQL会自动尝试将其转换为数字,大部分非数字的符号转换后就变成了0。
修正步骤很简单:
- 将字段类型改为
varchar(长度根据需求设置,比如varchar(10)足够存储绝大多数货币符号) - 把字段的排序规则设置为
utf16_unicode_ci(确保能正确存储像阿富汗尼؋这类特殊字符的货币符号)
调整完之后,货币符号就能正常存储了。
内容的提问来源于stack exchange,提问作者spreaderman
相关产品推荐
相关产品推荐

