我有下面的查询插入记录到我们的MySQL数据库。INSERT INTO MyTable (Id, Type) VALUES('ASSD', 1)ID的列类型为BigInt我们正在使用Dapper进行Insert ExecuteAsync(query, null);。我希望Dapper抛出异常,但它插入了一行,将Id列设置为零。如何让Dapper在插入的数据不正确时抛出异常?我本以为Dapper会抛出一个异常,但实际上它插入了一行,将Id列设置为零。
INSERT INTO MyTable (Id, Type) VALUES('ASSD', 1)
ExecuteAsync(query, null);
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
| 级别|代码|信息|| - ------|- ------|- ------|| 错误|小行星|整数值不正确:第1行中列"Id"的"ASSD"|
SELECT * FROM MyTable
| 身份证|类型|| - ------|- ------|| 无|1个|fiddle
1条答案
按热度按时间hjqgdpho1#
此MySQL服务器行为取决于当前SQL Mode设置。
如果您希望服务器在尝试插入不正确的值时产生错误,则必须将全局(编辑my.ini并重新启动MySQL)或会话(根据之前在此连接中的SET语句执行)SQL模式设置为STRICT。
| 级别|代码|信息|
| - ------|- ------|- ------|
| 警告|小行星|整数值不正确:第1行中列"Id"的"ASSD"|
| 级别|代码|信息|
| - ------|- ------|- ------|
| 错误|小行星|整数值不正确:第1行中列"Id"的"ASSD"|
| 身份证|类型|
| - ------|- ------|
| 无|1个|
fiddle