`
midstr
  • 浏览: 33217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于varchar的长度和数据库字符集迁移的问题

阅读更多
1、原来一直在使用varchar(n),但不是很清楚这个n的最大值是多少。查了一下sybase的用户手册,n的范围为数据的页大小,
   即使用select @@maxpagesize查到的数字。
 
除非设定string_rtruncation on,Adaptive Server将条目截断到指定列的长度而不加警告或出现错误信息。
2、数据库从cp850迁移到utf-8环境之后,原来的获取当事人名称的存储过程返回的结果有误,即有名称被截取的问题,如下代码: 
 
-- 去掉末尾的顿号
    set @MC = substring(@MC1len(@MC- 2)


比如说当事人名称为“张三、李四、”,在原来的cp850库返回的结果是“张三、李四。但是升级到utf-8之后,返回的就是“张三、李”。
  主要是cp850字符集,一个汉字占两个字节,而升级到utf-8之后就占三个字节了,所以这里的减2就不正确了。
  执行如下的脚本
declare @MC varchar(100
declare @length int
set @MC = '张三、李四、'
set @length = len(@MC)
print '%1!'@length
set @MC = substring(@MC1len(@MC- len(''))
print '%1!'@MC
在cp850下,print '%1!', @length打印的长度为12,而在utf-8下则返回的是6。当然print '%1!', @MC打印的结果都是"张三、李四"
  所以最终把代码改为如下就正确了,字符集就不会影响结果。
-- 去掉末尾的顿号
    set @MC = substring(@MC1len(@MC- len(''))
经常看到数据库版本限制引起的各种问题,看来有些知识需要普及一下。
除了查手册外,再提供一种比较方便的方法,可以得到当前ASE服务器上各项限制值。
执行如下命令即可:
dbcc traceon(3604)
go
dbcc serverlimits
go
分享到:
评论

相关推荐

    ORACLE数据库字符集[参考].pdf

    数据库字符集在数据库创建时确定,通常不可更改,用于存储CHAR、VARCHAR2、CLOB、LONG等数据类型,同时也用于标识表名、列名和PL/SQL变量。国家字符集则是用于存储NCHAR、NVARCHAR2、NCLOB等类型的数据,它是对...

    oracle 中文字符集问题

    对于字符型数据(如`CHAR`, `VARCHAR2`, `CLOB`, `LONG`),应使用与数据库字符集一致的编码;而对于多字节或Unicode数据(如`NCHAR`, `NVARCHAR2`, `NCLOB`),则应使用国家字符集定义的编码。 #### 五、查询和...

    导出/导入与字符集之间问题的解决

    总之,Oracle的多国语言支持和字符集设置是其全球化功能的基础,正确理解和管理这些设置对于数据库的正常运作和数据完整性至关重要。处理跨字符集的导出/导入问题需要对字符集有深入理解,并可能涉及二进制文件的...

    MySql表字符集问题[参考].pdf

    在创建或修改数据库字符集时,可以使用以下命令: ```sql CREATE DATABASE lybbs DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; ``` 或者对已有的数据库进行修改: ```sql ALTER DATABASE lybbs DEFAULT ...

    oracle查看字符集和修改字符集使用详解

    影响Oracle数据库字符集的主要参数是NLS_LANG环境变量,它由三部分组成:语言、地域和字符集。语言部分定义服务器消息的语言,地域部分规定日期和数字格式,而字符集部分则直接影响数据的编码。 字符集的实质是按照...

    Mysql迁移Oracle方案

    - **设置数据映射**:对捕获模型执行“设置数据映射”,特别需要注意的是设置源数据类型CHAR对应的Oracle数据类型为VARCHAR2,以避免迁移过程中数据被空白填充的问题。 - **转换为Oracle模型**:执行“转换为Oracle...

    Oracle到MySQL的迁移步骤.docx

    17. **解决迁移问题**:对于因行尺寸过大导致的迁移失败,如行中VARCHAR字段总长度超过65535字节,可以通过调整VARCHAR字段长度或使用TEXT类型来解决。 18. **数据迁移**:设置数据迁移脚本路径,然后执行数据迁移...

    内存数据库Timesten-SQL

    这些类型为存储文本信息提供了不同的方式,其中CHAR和VARCHAR2是单字节字符集(SBCS)的数据类型,而NCHAR和NVARCHAR2是多字节字符集(MBCS)的数据类型,通常用于存储Unicode字符。 4. TimesTen还支持其他一些数据...

    深入Oracle字符集的查看与修改详解

    在Oracle数据库中,数据库字符集是在创建数据库时设定的,通常不可更改,用于存储CHAR、VARCHAR2、CLOB、LONG等数据类型,同时也标识表名、列名和PL/SQL变量等。国家字符集(NATIONAL CHARACTER SET)是用于NCHAR、...

    IBM DB2 数据库使用小技巧

    除了指定数据库名称外,还需要设置字符集和地域信息,以确保数据的正确存储和检索。 #### 11. DB2版本迁移 `db2migratedatabase<db_name>` 版本迁移是在不同版本的DB2之间更新数据库结构和数据的过程。这通常发生...

    MySQL数据库.pdf

    在安装和配置方面,MySQL的默认端口是3306,用户为root,而默认字符集通常是latin1,但出于兼容性考虑建议改为gbk或utf-8。安装时可以选择启动远程登录功能并创建匿名账户。安装过程中可能遇到的错误可以通过多种...

    58数据库设计军规

    域名更容易修改和维护,当数据库服务器发生迁移或变化时,只需要更新域名指向即可,而无需修改所有依赖于该数据库的应用程序配置。 **7. 线上环境、开发环境、测试环境数据库内网域名遵循命名规范** - **解读**:...

    DB2到GreenPlum/PostgreSQL的转换指南

    - **字符型**: DB2支持`CHAR`、`VARCHAR`、`CLOB`等类型,而GreenPlum/PostgreSQL支持`CHARACTER`、`VARCHAR`、`TEXT`等类型。 - **日期时间类型**: DB2有`DATE`、`TIME`、`TIMESTAMP`等类型,而GreenPlum/...

    mysql4.0升级到mysql5(4.1),解决字符集问题

    MySQL 4.0 到 MySQL 5.4(或4.1)的升级过程中,一个关键环节是处理字符集问题,因为从这个版本开始,MySQL引入了对多种字符集的支持,包括GBK和UTF8,这可能导致原有的数据在迁移后显示异常。以下是详细步骤和相关...

    MYSQL数据库优化与表设计

    - 在选择CHAR和VARCHAR类型时,根据字段的实际需求进行选择,以平衡查询速度和存储空间。 - 字段长度应尽可能短,以提高查询效率和减少索引资源消耗。 #### 三、查询优化策略 1. **减少数据库访问次数**:通过...

    SQLServer2005数据库基础及应用_数据库类

    2. 数据类型:理解各种数据类型至关重要,例如INT用于整数,VARCHAR用于可变长度的字符数据,DATE用于日期,TIMESTAMP用于记录数据更改的时间戳。 3. DDL(Data Definition Language):用于创建和修改数据库结构,...

    大数据量高并发的数据库优化.pdf

    应尽量减少数据库访问次数和查询行数,缩小结果集,减轻网络负担。选择合适的字段类型,如数字类型优于字符串类型,减少比较次数;在可能的情况下,使用固定长度的CHAR字段以提升查询效率,对长度变化大的字段选择...

Global site tag (gtag.js) - Google Analytics