mysql - mysql将大数转换为char
问题描述
英语不是我的母语;请原谅打字错误。
我使用的是 5.5.38-MariaDB。mysql语句:</p>
SELECT CAST(11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
AS char);
我得到的结果是99999999999999999999999999999999999999999999999999999999999999999
,为什么?
更新:
MariaDB [(none)]> SELECT CAST(199999999999999999999999999999999999999999999999999999999999999999999999999999999 AS char);
+-------------------------------------------------------------------------------------------------+
| CAST(199999999999999999999999999999999999999999999999999999999999999999999999999999999 AS char) |
+-------------------------------------------------------------------------------------------------+
| 199999999999999999999999999999999999999999999999999999999999999999999999999999999 |
+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SELECT CAST(1999999999999999999999999999999999999999999999999999999999999999999999999999999999 AS char);
+--------------------------------------------------------------------------------------------------+
| CAST(1999999999999999999999999999999999999999999999999999999999999999999999999999999999 AS char) |
+--------------------------------------------------------------------------------------------------+
| 99999999999999999999999999999999999999999999999999999999999999999 |
+--------------------------------------------------------------------------------------------------+
1 row in set, 1 warning (0.01 sec)
MariaDB [(none)]> SHOW WARNINGS;
+---------+------+--------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------+
| Warning | 1916 | Got overflow when converting '' to DECIMAL. Value truncated. |
+---------+------+--------------------------------------------------------------+
1 row in set (0.00 sec)
解决方案
被1111...
解析为一个数字,特别是DECIMAL(65, ...)
. 65 是最大值;因为事情比这更大,它给了你 65 个 9。它给了你一个警告(可能被忽略了):
mysql> SELECT CAST(11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 AS CHAR) AS too_big;
+-------------------------------------------------------------------+
| too_big |
+-------------------------------------------------------------------+
| 99999999999999999999999999999999999999999999999999999999999999999 |
+-------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DECIMAL value: '' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)
你希望得到什么?
推荐阅读
- ios - SCNPlane 的 3D 世界位置 [ARkit]
- protocol-buffers - Protobuf NoClassDefFoundError - 解析 grpc 响应时出错
- javascript - Fetch API 不一致地修改请求正文
- vb.net - 带参数和不带参数的 WebView2
- c++ - 为什么代码调用 LValue 函数而不是 RValue 函数
- javascript - 解构对象时出现意外结果
- javascript - 根据其他对象值数组更新对象数组
- python - sorted 参数背后的语法是什么?
- javascript - 如何序列化 OpenTelemetry Javascript Span
- java - java中的DialogFlow快速入门示例不适合我