gpt4 book ai didi

mysql - 在 MySQL 中抑制 CAST() 警告?

转载 作者:可可西里 更新时间:2023-11-01 06:38:12 26 4
gpt4 key购买 nike

我在严格模式下使用 MySQL (SET sql_mode = 'STRICT_TRANS_TABLES') 将所有警告转换为错误。但是,我有一个查询预计会创建警告,因为它试图转换 VARCHAR可能为空或包含字母到整数的字段。

例子:

mysql> select CAST("123b" AS SIGNED);
+------------------------+
| CAST("123b" AS SIGNED) |
+------------------------+
| 123 |
+------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '123b' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

有没有办法抑制 CAST() 引起的警告? 没有禁用严格模式?或者,是否可以为单个查询或函数(类似于PHP 中的@ 运算符)禁用严格模式而不调用SET两次暂时关闭严格模式?

背景:我有一张包含街道号码的表格。它们中的大多数是数字,但有些在末尾包含字母。为了实现简单的“自然排序”,我想使用 ORDER BY CAST (StreetNr AS SIGNED), StreetNr并且 CAST() 返回的值适用于第一级排序。

最佳答案

我假设问题是您正尝试使用如下查询将数据从一个表插入到另一个表中:

INSERT INTO ...
SELECT ...
FROM ...
WHERE ...
ORDER BY ...

由于您在问题中描述的 CAST() 问题,插入失败。

这准确吗?

如果是这样,最简单的解决方法是使用 INSERT IGNORE。该语法对于忽略重复键错误很有用,但它也可用于忽略影响您的 CAST() 错误。

更新后的查询看起来像这样:

INSERT IGNORE INTO target_table
SELECT ...
FROM source_table
WHERE ...
ORDER BY CAST (StreetNr AS SIGNED), StreetNr

关于mysql - 在 MySQL 中抑制 CAST() 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com