当前位置:首页 > 开发实录 > sql参数在多语种网站开发中的注意事项

sql参数在多语种网站开发中的注意事项

2015-04-19 / 1150次
如题,当单语言的网站向多语言版本扩展时,会遇到unicode字符编码存储问题,以及伴随的sql查询问题。
以mssql为例。
在旧版本的数据库中,文字资料以varchar字段类型存储于表中。后来发现,当保存德语文字时时出现了一大堆问号。一番google后发现,存储时应该采用nvarchar字段存储。于是把所有相关的字段来了一次大改,统一改为nvarchar类型。
后续的验证排查过程中,发现个别地方始终是一堆问号。
在跟踪过程中发再如下代码有问题:
        /// <summary>
        /// 添加字符类型的参数。
        /// </summary>
        /// <param name="paraName">参数名称</param>
        /// <param name="paraValue">参数值</param>
        public void AddParameter(string paraName, object paraValue)
        {
            CheckCommand();
            SqlParameter para = this.cmd.CreateParameter();
            para.ParameterName = paraName;
            para.SqlDbType = SqlDbType.VarChar;
            para.Value = Utility.isNullOrEmpty(paraValue) ? Convert.DBNull : paraValue.ToString();
            this.cmd.Parameters.Add(para);
        }
资料显示:
varchar:长度为 n 个字节的可变长度且非 Unicode 的字符数据。
nvarchar:包含 n 个字符的可变长度 Unicode 字符数据。
由此想到,在向SqlCommand传送参数时,varchar类型满足不了Unicode的字符集要求,于是正常的参数传过去后,就出现了一大堆“?”号。改为:
        /// <summary>
        /// 添加字符类型的参数。
        /// </summary>
        /// <param name="paraName">参数名称</param>
        /// <param name="paraValue">参数值</param>
        public void AddParameter(string paraName, object paraValue)
        {
            CheckCommand();
            SqlParameter para = this.cmd.CreateParameter();
            para.ParameterName = paraName;
            para.SqlDbType = SqlDbType.NVarChar;
            para.Value = Utility.isNullOrEmpty(paraValue) ? Convert.DBNull : paraValue.ToString();
            this.cmd.Parameters.Add(para);
        }
再测试,数据提交成功了。
由此可见,网站语言版本的扩充,应当注意的除了网址的规划,数据库结构的规划。数据库查询操作代码层面上,也是有不少要注意的地方的。

济南国尚网络技术有限公司,是专注于济南地区的,专业从事济南网站建设(济南网站制作、济南建网站等)的互联网公司。
 
上一篇:没有了 下一篇:windows server 2008 启动错误:3417的解决办法
济南国尚网络技术有限公司©版权所有 2013-2015 SiteMap 管理登陆