语言环境的Decimal采坑

#前言#
老板说要上欧洲做个Demo演示,让咱把机器换成欧洲的语言和时区,然后跑跑一年的数据;

行吧,干吧!

随手选了个德国,然后准备好数据库和Demo,开始,写入数据库失败,what? amazing^^

#分析#

  1. 将插入数据库的错误语句打出来,一看,我尼玛,这咋Value比Column多呀
  2. 再次分析这个Value是个Decimal类型的,一跟发现不得了,小数点变成了逗号,难怪写入不了数据库
  3. 那么问题来了,为什么本该是点的变成了逗号呢?

区别就在于语言环境有关系

#解决方案#

  1. 在Cntrol→Clock,language,and Region→Change loaction→Formats的Additional setting中的Decimal symbol缺省值为‘,’,将之改为‘.’即可
  2. 将格式化之后的结果进行替换

    1
    2
    DecimalFormat df = new DecimalFormat("0.00");
    return df.format(value).replace(",", ".");
  3. 特别声明小数点分隔符为”.”

    1
    2
    3
    4
    5
    DecimalFormat df = new DecimalFormat("0.00");
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    df.setDecimalFormatSymbols(symbols);
    return df.format(value);

解决起来其实不难,但是在完全没踩过这个坑的情况下,完全一脸懵逼,一度怀疑是不是德国计算都没得小数点呀,难道他们用逗号算算术的?amazing

#语言环境之数据库采坑#
在上面的准备数据没有问题后,又踩到了一个新坑——数据库。
虽然数据库的缺省语言换成了British English,但是发现sa的用户的缺省语言依然是English,这就造成了当连接User为sa时,在插入时间字段时会报Error“The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.”.
解决方法就是将sa的缺省语言该为与系统一致。

其实最保险的方式应该先更改语言与时区,然后更改数据库的缺省语言,创建一个改语言环境下的用户,用该用户作为连接,创建新的数据库,然后启动Server,运行Demo。

Donate comment here
-------------本文结束感谢您的阅读-------------
Fork me on GitHub