折腾了我一个晚上的mySQL字符集(PHP表单提交 + mySQL字符集 + 汉字被截断)

来源:互联网 发布:网盘 云盘 java 开源 编辑:程序博客网 时间:2024/05/16 08:58
折腾了我一个晚上的mySQL字符集

最近的一个网站,里面一个版块是教职员工,当我添加教师简介的时候(直接从word里面拷贝过来),大段的文字总是被截断,第一个截断的字符是全角的“-”,第二个截断的地方时“贠”,还有“燚”,因为我在提交表单里面用的是 eWebEditor编辑器,最开始以为是它在做怪,但是等我把文字先拷贝到记事本,然后在copy到表单里面的时候还是这个样子,未果……

那就肯定是这些字符在捣乱了,所以用mySQL-front测试这些字符,果然,在MySQL-front中直接用SQL语句插入是还是会自动截断,终于有点希望了,但是,我google了老半天,依然没有解决办法。

接下来我做了第二个尝试:考虑到可能是全角字符在作怪,那好吧,google了一段全角转为半角的代码,但是对这些生僻的汉字还是无效,依然在插入数据库的时候截断,伤心与绝望中……

最后,没有办法的办法:用ereg_replace()函数,一一替换掉这些该死的字符和汉字,可是这个仅仅是最拙劣的救活措施了。

好在作为一个久经沙场的老将,我准备做最后一搏,我相信google力量的强大,在网上看着各个相关度不大的帖子,突然看到了和mySQL字符集相关的一段,有人提出了Mysql的一个bug说是他会自动截断中文全角符号比如“-”,但是后面有人说mySql官方已经在mySQL的后续版本中修正了这个bug,我一看我的mySQL已经是5.0了,应该不是这个问题,但是就是这个帖子给我了灵感,难道真的是mySQL5.0的字符集在作怪,因为曾经被它的字符集搞过一次了,那次是因为中4.0升级到5.0的乱码问题。

于是乎,我把mysql数据库,表,字段的编码都有原来的gb2312改为了gbk,这回虽然不会自动截断了,但是网页里面显示的是?,哈哈,小兴奋中,但是,革命尚未成功,我们还需女努力,不再截断,显示?,说明现在已经解决了一般问题了,下面开始解决乱码问题,遂轻车熟路找到我以前解决问题的知识库,突然看到了这句“设定(connection)的字符集,网页字符集和table字符集三者一致,且均为gb2312”,那我现在是gbk,那就都改成gbk,果然大功告成,功德无量。

总结:
这些教师的名字中有些是大字符集里面的,比如上面提到的一些汉字,gb2312的编码里面不包括这些字符,所以在进行sql查询的时候mySQL不能识别就都截断了,但是mySQL也有问题,觉得做的不够人性化,至少把客户的数据搞丢了,应该通知一下吗,希望mySQL在后续版本中能修正一下。

以后在做项目的时候,mySQL数据库都用gbk的编码的。吃一堑长一智。