你的位置:
问答吧
-> MySQL
-> 问题详情
关于char 类型转 varchar类型的问题
由于想把表设计为静态的表,所以牺牲了一点空间,有两个字段使用了char(40),导致使用MSSQL的OPENRowSet()函数无法处理...所以本人想在查询语句中进行转换,却发现无法把char(40)转换成varchar(42)
..举个例子了...MySQL版本为5.0.27 +MyISAM引擎:
create database if not exists `game`;
USE `game`;
CREATE TABLE `eugene` (
`name` char(40) character set latin1 collate latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
insertinto `eugene`(`name`) values ('eg');
然后执行:
select cast(name AS varchar(42)) from eugene出现语法错误
若是:
select cast(name AS char(42)) from eugene
是没问题的,而且varchar类型转char类型也是没问题的,所以请大家赐教
作者: jinguanding
发布时间: -10-12
大家近来看看啊......特别是有多年MySQL经验的人...
作者: jinguanding
发布时间: -10-12
cast (** as varchar(42))
本来就不对啊
作者: cyt
发布时间: -10-15
谢谢回复..
那麻烦您给写个能执行的语句出来..请赐教,谢谢!
作者: jinguanding
发布时间: -10-15
MYSQL中的CAST 和CONVERT函数不能把CHAR类型的列转化为VARCHAR类型。
只能把VARCHAR类型转化为CHAR类型。除非你重新定义。
作者: yueliangdao0608
发布时间: -10-15
我也是测试的时候发现有这样的问题..且手册也没有提到是否可以转,估计是不能转,所以到论坛求证下..谢谢回复..
建议MySQL AB改进下
作者: jinguanding
发布时间: -10-17
那你就去他们网站上发个帖子吧。
作者: yueliangdao0608
发布时间: -10-18
ssss
作者: zhangly80221
发布时间: -10-22
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
建议新建一张表,然后从旧的表插入记录到新表
作者: atgc
发布时间: -10-22
好几天没进了..大家还在为此贴发信息,小弟非常感谢...
因为我是在通过MSSQL的Openrowset()函数读数据的时候,会出现问题.所以才想在 Select语句中进行char转varchar.....
至于不想把char类型的列改为 varchar的原因是想保持该表为静态表,即不需要为表动态分配空间(该表只有两个字段的值为字符串,且长度比较固定,其他为整型),而提供服务器性能....
至于怎么解决我想了很多办法都没解决..所以来求证下......
谢谢大家.....这个问题...什么 时候我把MySQL的代码改了...
作者: jinguanding
发布时间: -10-22