`
midstr
  • 浏览: 31987 次
  • 性别: 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
分享到:
评论

相关推荐

    Mysql中varchar长度设置方法

    主要介绍了Mysql中varchar长度设置方法的相关资料,本文还给大家带来了valar类型的变化及char()和varchar()的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    解决不同字符集数据库间的数据同步问题

    解决不同字符集数据库间的数据同步问题 utl_raw_cast_to_raw utl_raw_cast_to_varchar2

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    oracle数据库表结构转gp数据库表结构、转mysql、数据库时表字段长度问题

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

    明白ORACLE的多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的显示等有效。ORACLE的多国语言设置最主要的 两个特性...

    MySQL数据库char与varchar的区别分析及使用建议

    在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char.。这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是 从数据的保存方式来看,两者相差很大。而且其具体的实现方式,还依赖与存储引擎。我...

    varchar 和varchar2之间的联系和区别

    为了方便更好的设计数据库,特意为用户讲述了以下它们呢之间的关系!

    VARCHAR与CHAR字符型数据的差异.docx

    char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度。 1). 当字符串长度小于255时,用额外的1个字节来记录长度 2). 当字符串长度大于255时,用额外的2个...

    oracle修改字符集,解决乱码问题.

    oracle修改字符集,解决乱码问题.

    MySQL动态修改varchar长度的方法

    主要介绍了MySQL动态修改varchar长度的方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    从mysql数据库迁移至sqlserver数据库

    从mysql数据库迁移至sqlserver数据库,支持2005,2008版本。 text类型建议先转换为varchar(10000)类型,否则迁移后中文会出现乱码。迁移后会自动转换为ntext类型。

    数据库字符串Id生成器

    数据库字符串Id生成器,结合年月日时分秒等封装的id生成器,根据机器码来判定,不可能出现重复的id,数据库使用varchar类型或者bigint类型存储

    MySQL数据库varchar的限制规则说明

    MySQL数据库中varchar最大长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的。本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,接下来就让我们一...

    oracle数据迁移到db2数据库的实现方法(分享)

    可以将创建表的语句直接拷贝值sqldbx(连接db2数据库的工具)中修改字段的类型,如varchar2转化为varchar,number转化为integer。还有primary key、unique的变化。 2、表数据迁移 在Plsql中选择表——>右键——>qurey...

    Mysql varchar大小长度问题介绍

    如果被 varchar 超过上述的 b 规则,被强转成 text 类型,则每个字段占用定义长度为 11 字节,当然这已经不是 varchar 了

    MySQL索引长度限制原理解析

    这篇文章主要介绍了MySQL索引长度限制原理解析,文中通过示例代码...varchar的最大长度是指字符长度,若数据库字符集为utf-8,则一个字符占3个bytes。因此在utf-8字符集下,innodb引擎创建的单列索引长度不能超过255个

    数据库设计规范模板.pdf

    XXX数据库设计规范模板 目 次 1 范围 2 引用文件 3 术语、定义和缩略语 3.1 术语 3.2 缩略语 4 总体要求 4.1 数据库设计总体要求 4.2 数据库编程总体要求 5 数据库设计要求 5.1 数据库字符集选择 5.2 数据库表空间...

    Oracle接收长度大于4000的字符串

    Oracle接收长度大于4000的字符串 Oracle接收长度大于4000的字符串

    调拨单数据库设计.docx

    调拨单数据库设计 调拨主表 字段名 中文名 主外键 数据类型 是否为空 备注 D_ MoveNO 单据号码 PK VARCHAR N D_ MoveData 单据日期 VARCHAR N D_ WareOutID 调出仓库 VARCHAR N D_ WareID 调入仓库 VARCHAR N D_ ...

    varChar和Char之间的区别?

    2.char的存取速度比varchar要快,应为长度固定,方便程序的存储和查找; 3.char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也...

Global site tag (gtag.js) - Google Analytics