开发者社区> 问答> 正文

如何在char列中保存Ascii码值为(128-255)的字符?:报错

现象:使用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)区间的字符,究竟是什么原因有朋友知道吗?

展开
收起
kun坤 2020-06-14 09:59:57 798 0
1 条回答
写回答
取消 提交回答
  • 问题暂时解决,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).而且其他人证明了没有问题,只不过本人见鬼了,遇到了这个问题。
    ###### @fabbong : 我用的就是你上面的生成表的代码。######编码是不是用的latin编码或其他?如果用GBK或UTF8,是不能插入char(128)的。######128--255是没有字符显示的。我用5.0.51b执行修改是不会出错。你要不换个mysql版本试试?######很明显嘛,你是gbk编码的,而128对应的字符是这个€,值不对插入不了
    2020-06-14 10:00:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载