MySQL字符集设置不正确引起乱码
MySQL + C++Builder +QT 这么个环境,一段中文信息从QT生成,写入一个ini文件,CB读出这个ini里的文字,生成SQL语句写入MySQL。
中间过程一切正常,最后的SQL执行出错,提示信息里说有无效字串,然后是一些乱码。
虽然可以把这个字段用binary()方式写入让SQL正常执行,但这个字段再读出来的数据也不正确。
CB早期版本的内部字串AnsiString和QT里utf8字串本来就不是一路人,所以看见乱码都没往别的地方想,直觉就感觉这是两个环境内码不一致引起。
于是花了大半夜的时间各种排查,各种转码,直到天都亮了才想到是不是MySQL的问题?
去掉中间环节直接把SQL写死执行一下,果然也出乱码了。
打开数据库管理工具看一下,这个表的默认字符集是latin1,而数据库里其它表默认字集是utf8。
这是个因为需要增加功能最近新建立的表,也不知道我是在哪台机器上哪个环境里随便建立的,没注意使用了那个环境里默认的latin1字集。
表里没数据,于是删除之后重新用正确字集建立一下,一切正常。