mysql 列类型不正确时插入记录的Dapper

brc7rcf0  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(104)

我有下面的查询插入记录到我们的MySQL数据库。
INSERT INTO MyTable (Id, Type) VALUES('ASSD', 1)
ID的列类型为BigInt
我们正在使用Dapper进行Insert ExecuteAsync(query, null);。我希望Dapper抛出异常,但它插入了一行,将Id列设置为零。如何让Dapper在插入的数据不正确时抛出异常?
我本以为Dapper会抛出一个异常,但实际上它插入了一行,将Id列设置为零。

hjqgdpho

hjqgdpho1#

此MySQL服务器行为取决于当前SQL Mode设置。
如果您希望服务器在尝试插入不正确的值时产生错误,则必须将全局(编辑my.ini并重新启动MySQL)或会话(根据之前在此连接中的SET语句执行)SQL模式设置为STRICT。

CREATE TABLE MyTable (Id BIGINT, Type INT)
SET SESSION sql_mode = ''  -- clear session mode
INSERT INTO MyTable (Id, Type) VALUES('ASSD', 1) 
-- accepted, warning produced, zero inserted
SHOW WARNINGS

| 级别|代码|信息|
| - ------|- ------|- ------|
| 警告|小行星|整数值不正确:第1行中列"Id"的"ASSD"|

SET SESSION sql_mode = 'STRICT_TRANS_TABLES'   -- set strict mode
INSERT INTO MyTable (Id, Type) VALUES('ASSD', 2)
-- ejected, error generated
Incorrect integer value: 'ASSD' for column 'Id' at row 1
SHOW WARNINGS

| 级别|代码|信息|
| - ------|- ------|- ------|
| 错误|小行星|整数值不正确:第1行中列"Id"的"ASSD"|

SELECT * FROM MyTable

| 身份证|类型|
| - ------|- ------|
| 无|1个|
fiddle

相关问题