现象:使用Char(X)更新或插入只能保存0-127码值的字符。不能保存码值128以上的字符值。
环境:Windows2003(SP2) MySQL Server 5.5.1(直接安装版)数据库字符集GBK。
C: >mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 92477
Server version: 5.5.14 MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
过程:
mysql> show create table test;
CREATE TABLE test
(
idtest
int(11) NOT NULL,
charset2
char(10) DEFAULT NULL,
PRIMARY KEY (idtest
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
mysql> update test set charset2=char(128) where idtest=2;
ERROR 1366 (HY000): Incorrect string value: '\x80' for column 'charset2' at row 1
但执行Select char(128)却不会出错。非常急,项目中需要用到(128-255)区间的字符,究竟是什么原因有朋友知道吗?
问题暂时解决,gbk,utf8编码都是不行的。表编码为GBK,只好将列改成latin编码了,这样可以放置0-255的编码了。
######因为中文字符占两个char######应该不是这个原因吧, update test set charset2=char(127) where idtest=2; 执行没有任何问题,而且有结果。 char(128)也只是占用一个字节。在别人的论坛上有朋友回复 update test set charset2=char(128) where idtest=2;是可以执行的,但不知道原因。######表的字符集的问题,试试utf8
######
也用utf8试过了,结果一样。问了其他用过的人,他们没有发生这个问题。也许就是我??
参考http://zhidao.baidu.com/question/299397847.html
######当然不行,ascii表里只有0--127,也就是128种符号######128-255为扩展Ascii码,一个字节表示的范围也在(0-255),CHAR在MySQL的文档里都是0-255(其他数据库或语言都是0-255).而且其他人证明了没有问题,只不过本人见鬼了,遇到了这个问题。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。