能的呀,我的MySQL 5.0.22! 测试如下,我插入€的时候数据库自动转换为字符实体!mysql> select * from unitinfo; +----+---------------------------+-----------+------ | id | unitname | position | sort +----+---------------------------+-----------+------ | 4 | 这个字符€能不能显示 | 1234,4321 | AA +----+---------------------------+-----------+------ 1 row in set (0.00 sec)
你用的是utf8吧。这个bug只存在于gbk数据库。
我试了latin1的可以。在gbk里则会自动中断。 Bug #11987 mysql will truncate the text when the text contain GBK char:"0xA3A0" and "0xA1" Allow to store and retrieve even unassigned GBK codes. Like we did in Big5 earlier. have_gbk.inc, have_gbk.require, ctype_gbk.result, ctype_gbk.test: new file我看了mysql的bug列表,在5.0.11里解决了0xA3A0和0xA1的同类问题,可是我现在用的是5.0.24,存在0x80中断字符串的问题。
没有,我数据库字符集GBK! 给你到处我数据库表结构你看看!DROP TABLE IF EXISTS `unitinfo`; CREATE TABLE `unitinfo` ( `id` int(10) unsigned NOT NULL auto_increment, `unitname` varchar(255) NOT NULL, `position` varchar(255) NOT NULL, `sort` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `unitname` (`unitname`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk;
你试试这个,其中testname设为text字段。set names gbk,character_set_client=binary; insert into `test` ('testname') values ('abc€defg');结果写入的是'abc',从€开始的后半段消失了。
按你说的方法,还是能!数据库表结构如下USE `test`; DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `testname` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=gbk;测试数据如下:mysql> select * from test; +-----------------------------+ | testname | +-----------------------------+ | € | | 测试€能不能插入数据库 | +-----------------------------+ 2 rows in set (0.00 sec)
按照你的方法在命令行下输入insert into `test` ('testname') values ('abc€defg'); 会提示ERROR 1406 (22001): Data too long for column 'testname' at row 1我就不明白你为什么要在命令行下插入€? 数据不都是从表单提交插入到数据库的吗? 测试的时候可以这样,可是投入使用的时候,数据库服务器你一定能用命令行去操作?
对,显然是是bug用gbk编码作的时候存到数据库文件里的字符就已经是坏的了。用utf8,库里是好的,但是转成gbk的时候就转错了显示?,显然是mysql转化函数有问题这个问题显然不是A1A4 (middle dot), A1AA (em dash), A6E0-A6F5, and A8BB-A8C0这些字符的问题而是ascii扩展码的问题恭喜陈水,发现bug
测试如下,我插入€的时候数据库自动转换为字符实体!mysql> select * from unitinfo;
+----+---------------------------+-----------+------
| id | unitname | position | sort
+----+---------------------------+-----------+------
| 4 | 这个字符€能不能显示 | 1234,4321 | AA
+----+---------------------------+-----------+------
1 row in set (0.00 sec)
mysql will truncate the text when the text contain GBK char:"0xA3A0" and "0xA1"
Allow to store and retrieve even unassigned GBK codes.
Like we did in Big5 earlier.
have_gbk.inc, have_gbk.require, ctype_gbk.result, ctype_gbk.test:
new file我看了mysql的bug列表,在5.0.11里解决了0xA3A0和0xA1的同类问题,可是我现在用的是5.0.24,存在0x80中断字符串的问题。
给你到处我数据库表结构你看看!DROP TABLE IF EXISTS `unitinfo`;
CREATE TABLE `unitinfo` (
`id` int(10) unsigned NOT NULL auto_increment,
`unitname` varchar(255) NOT NULL,
`position` varchar(255) NOT NULL,
`sort` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `unitname` (`unitname`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
insert into `test` ('testname') values ('abc€defg');结果写入的是'abc',从€开始的后半段消失了。
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`testname` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;测试数据如下:mysql> select * from test;
+-----------------------------+
| testname |
+-----------------------------+
| € |
| 测试€能不能插入数据库 |
+-----------------------------+
2 rows in set (0.00 sec)
会提示ERROR 1406 (22001): Data too long for column 'testname' at row 1我就不明白你为什么要在命令行下插入€?
数据不都是从表单提交插入到数据库的吗?
测试的时候可以这样,可是投入使用的时候,数据库服务器你一定能用命令行去操作?
我测试的时候输入的数据全部是在表单里头!
在表单的文本框输入 abc€defg 全部都能插入到数据库!
但是插入到数据库中就显示为abc€defg!
你说的:没说过要在命令行下试,是不是这个意思?PS:CSDN的帖子内容我显示正常,显示
郁闷。mysql5出了个bug,€这个符号写不进去。有没有可能他们在显示帖子内容的时候将字符实体显示为原来的符号?
让我输入的€无法显示!
哥们,说完吃饭去了!
要不等唠叨老大来给看看?
然后读取数据库后,输出到浏览器是€,在浏览器页面显示的是€!
http://lists.mysql.com/internals/27483
4.1以后就对存入库里字符的编码进行了拆分&判断,如果超过预设编码长度将提示字符太长
显然这个拆分目前还有问题,估计它使用<=127作为判断的,因为双字节字符肯定能存单字节字符;gbk比较头疼的就是两个字节里面后一个可能是ascii码