delphi XE10 连接mysql 对于 timestamp 类型字段查询的问题

发布时间 2024-01-09 13:54:21作者: zhangjinbao66

目前 使用 delphi XE10.1 连接mysql (版本 8.0.19)

提示:

raised exception class EFDException with message '[FireDAC][Stan]-43. Value [000⎰̴] is out of [Cardinal] data type range'.

 

建表语句如下:

CREATE TABLE `tb_test` (
`UpdateTime` timestamp(3) NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

insert into tb_test(UpdateTime)
select now();

delphi 代码如下:

unit UntTest;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
FireDAC.Phys.MySQLDef, FireDAC.Phys.MySQL, Data.DB, FireDAC.Comp.Client,
Vcl.StdCtrls, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.Comp.DataSet;

type
TFrmTest = class(TForm)
Con: TFDConnection;
FDPhysMySQLDriverLink: TFDPhysMySQLDriverLink;
btnQuery: TButton;
query: TFDQuery;
procedure FormCreate(Sender: TObject);
procedure btnQueryClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmTest: TFrmTest;

implementation

{$R *.dfm}

procedure TFrmTest.btnQueryClick(Sender: TObject);
begin
try
//CREATE TABLE `tb_test` (
//`UpdateTime` timestamp(3) NULL DEFAULT NULL
//) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

//insert into tb_test(UpdateTime)
//select now();

query.Close;
//query.SQL.Text:='select * from tb_test';
query.SQL.Text:='select * from tb_test';

query.Open;
except
on e:Exception do
begin
ShowMessage('btnQueryClickException:'+e.Message);
end;
end;
end;

procedure TFrmTest.FormCreate(Sender: TObject);
begin
try
Con.Connected:=False;
Con.Params.Clear;
Con.DriverName:='Mysql';
Con.Params.Add('Server='+'127.0.0.1');//数据库IP
Con.Params.Add('Port='+'3306');//数据库端口
Con.Params.Database :='mydata';//数据库名称
Con.params.UserName:= 'root';//数据库用户名
Con.params.Password:='mima';//数据库密码
//Params.Add('CharacterSet=utf8');
Con.params.Add('CharacterSet=gb2312');
Con.params.Add('CharacterSet=gb2312');
Con.Connected := True;
except
on e:Exception do
begin
ShowMessage('FormCreateException:'+e.Message);
end;
end;
end;

end.

 

将timestamp 长度改成 1、2、4、5 都没有问题 唯独3不行。兄弟们注意避坑。