Delphi XE 使用 MySQL 数据库一个奇怪的问题
我用的是自带的 ADO 组件连接 MYSQL ,连接很简单,如下:
1、下载一个 MYSQL 驱动安装上 下载地址
2、连接串
Adoc.ConnectionString :=
'DRIVER={Devart ODBC Driver for MySQL};'+
'SERVER='+ 主机地址或主机名 +';'+
'DATABASE='+ 数据库名 +';'+
'USER='+ MYSQL 用户名 +';'+
'PASSWORD='+ MYSQL 密码 +';';
- 这样连接的优点是方便 缺点是目标需要也安装驱动 只安装驱动即可不必设置 ODBC
之后就是讨厌的中文乱码问题解决
网上介绍的大多是数据库编码改成 UTF8 这样不能完全解决 但使用 DELPHI 不乱码最重要的是设置 ADO 连接也使用 UTF8 之后保存中文时用 AnsiToUtf8 读取时用 Utf8ToAnsi
AdoQuery.Close;
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('set names utf8');
AdoQuery.ExecSQL;
接着奇怪的问题出现了
Adoq.Edit;
sSave := AnsiToUtf8('中文测试');
Adoq.FieldByName('Field').Value := sSave;
Adoq.Post; // 这样就会出错 说 Data too long for column 'Field' at row 1'. 错误,说字段不够长可确信字段长度够用
Adoq.Edit;
Adoq.FieldByName('Field').Value := AnsiToUtf8('中文测试');
Adoq.Post; // 同样 没改数据结构的情况下 这样就没问题
*有大佬知道咋回事儿吗?