#前言#
老板说要上欧洲做个Demo演示,让咱把机器换成欧洲的语言和时区,然后跑跑一年的数据;
行吧,干吧!
随手选了个德国,然后准备好数据库和Demo,开始,写入数据库失败,what? amazing^^
#分析#
- 将插入数据库的错误语句打出来,一看,我尼玛,这咋Value比Column多呀
- 再次分析这个Value是个Decimal类型的,一跟发现不得了,小数点变成了逗号,难怪写入不了数据库
- 那么问题来了,为什么本该是点的变成了逗号呢?
区别就在于语言环境有关系
#解决方案#
- 在Cntrol→Clock,language,and Region→Change loaction→Formats的Additional setting中的Decimal symbol缺省值为‘,’,将之改为‘.’即可
将格式化之后的结果进行替换
1
2DecimalFormat df = new DecimalFormat("0.00");
return df.format(value).replace(",", ".");特别声明小数点分隔符为”.”
1
2
3
4
5DecimalFormat 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。