标签:mysql mariadb datatypes cast mariadb-10-1
如果我想要一个字符串并创建一个表(这在strict mode中失败),
CREATE TABLE g
AS SELECT CAST('2147483699' AS int);
我如何告诉它我想要一个bigint类型?我也会得到一个int(10)类型.选择它也很幽默,
+---------------------------+
| CAST('2147483699' AS int) |
+---------------------------+
| 2147483647 |
+---------------------------+
数据实际上是错误的,它默默地失败了. I know that’s a known issue with this database having really poor defaults,但我怎么能把这张桌子作为bigint创建呢?
CREATE TABLE g
AS SELECT CAST('2147483699' AS bigint);
这样做我得到这个错误,
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘bigint)’ at line 2
如何将一个整数投入bigint?
PostgreSQL的
使用PostgreSQL,它非常简单.除了在转换为int时抛出异常,还可以使用强制转换为bigint
SELECT CAST('2147483699' AS bigint);
int8
------------
2147483699
解决方法:
默默?我们试试吧:
CREATE TABLE g
AS SELECT CAST('2147483699' AS int);
MariaDB 10.1.32,默认sql_mode(非严格)
Query OK, 1 row affected, 1 warning (0.19 sec) Records: 1 Duplicates:
0 Warnings: 1
警告是:
| Warning | 1264 | Out of range value for column ‘CAST(‘2147483699′ AS int)’ at row 1 |
是的,从表格中选择是有趣的,但鉴于警告,这并不奇怪.
(我目前没有MariaDB 10.2实例,但是对dbfiddle.uk进行测试表明它也失败了,尽管再次没有静默.)
MariaDB 10.3.6,默认sql_mode(严格)
没有警告.
select * from g;
得到:
+---------------------------+
| CAST('2147483699' AS int) |
+---------------------------+
| 2147483699 |
+---------------------------+
1 row in set (0.000 sec)
并且该列确实被创建为bigint(10).
MySQL 8.0,默认严格和非严格sql_mode
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘int)’ at line 2
电脑说没有.
结论
MariaDB或MySQL可以作为bigint投射吗?正如我们所看到的,是的,MariaDB 10.3可以(虽然它还不是GA ……但现在肯定会是任何一天).但是,它只能隐式地转换为bigint.您不能显式地转换为bigint,就像您不能转换为varchar(但请参阅MDEV-11283),text,float,tinyint等.您可以强制转换为有限数量的数据类型.这没有很好的文档记录,但CAST似乎只支持与CONVERT function列出的相同数据类型.
标签:mysql,mariadb,datatypes,cast,mariadb-10-1 来源: https://codeday.me/bug/20190806/1601050.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。