mysql 将大数转换为字符

标签 mysql mariadb

英语不是我的母语;请原谅输入错误。

我正在使用 5.5.38-MariaDB。 Mysql语句:

SELECT CAST(11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
AS char);

我得到的结果是999999999999999999999999999999999999999999999999999999999999999999,为什么?

更新:

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)

你希望得到什么?

关于mysql 将大数转换为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531101/

相关文章:

centos 6.4 上的 mysql 5.5

java - 将 MariaDB 几何图形映射到自定义 Hibernate 类型

mysql - 奇怪的SQL行为:变量未正确设置不相关的计算列

mysql - 选择所有行 (700000) 很长时间 - 小时

php - 有一个图像,当点击到 mySQL 查询的变量时发送信息

java - 没有主键表的 Hibernate 映射

php - 查询表中的重复条目

php - 通过使用 php 将随机数插入 mysql 表中,将条目分组为 5 个随机组

php - 在 MySQL 中拆分数据以使其更快、更易于访问

Docker + MariaDB 连接