存贮过程返回特定某一条记录,这条记录的mobile字段数据我通过MySQL Workbench程序查询出来木有空格,况且VARCHAR(16)字段数据库本身也不容许插入超过16个字符。18这个数字估计正好是"木有手机会怎么样?”这9个汉字(问号也是全角输入的)x2得到的,猜测可能是FireDAC驱动或某数据组件对字段类型分析不适应UTF-8汉字编码或是其它。
存贮过程返回特定某一条记录,这条记录的mobile字段数据我通过MySQL Workbench程序查询出来木有空格,况且VARCHAR(16)字段数据库本身也不容许插入超过16个字符。18这个数字估计正好是"木有手机会怎么样?”这9个汉字(问号也是全角输入的)x2得到的,猜测可能是FireDAC驱动或某数据组件对字段类型分析不适应UTF-8汉字编码或是其它。
重新检查了一下数据库及表字符集设置情况,针对服务器也检查了MY.INI配置文件里确实有如下设置:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
数据库配置出错的可能性较小,另外说明一下就是同一个程序RAD STUDIO SEATTLE图形界面本身正确显示了数据(查询出来的),共用的数据库配置连接池,但不知道为什么通过TFDStoredProc调用存贮过程就抛异常。在网上查了一下存贮过程使用的是MySQL系统范围字符集设置,按说不应用有错,郁闷了。
UTF8对汉字编码最大三个字节,俺的上文已提出来了,从国际化的角度来说一个汉字就是一个字符(非专指ASCII字符),至于用什么编码则是另一回事。MYSQL的V4.1以上版本VARCHAR(16)字段可以存贮最大16个汉字,MYSQL会动态根据字符集编码调整存贮字节(UTF8编码对“木有手机会怎么样?”会提供3X9=27个字节(前文有计算错误))。你这个计算长度是没有问题,但不能说明MYSQL问题现象:1、数据库MySQL V5.1,WINDOWS平台,数据库引擎Innodb,缺省字符集从数据库到表和客户端全是UTF-8。