mysql – 为什么整数DEFAULT值会得到引号?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 为什么整数DEFAULT值会得到引号?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2227字,纯文字阅读大概需要4分钟。
内容图文
![mysql – 为什么整数DEFAULT值会得到引号?](/upload/InfoBanner/zyjiaocheng/911/9c882622e66a460caea50f65a29c82ea.jpg)
在MySQL 5.6.23上创建的简单测试表:
CREATE TABLE `test` (
`tinyint` tinyint(1) NOT NULL DEFAULT 0,
`int` int(11) NOT NULL DEFAULT 0
);
注意如何写入DEFAULT值:字面上为0.一旦创建,我会:
SHOW CREATE TABLE `test`;
得到:
CREATE TABLE `test` (
`tinyint` tinyint(1) NOT NULL DEFAULT '0',
`int` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DEFAULT值已获得报价:’0’!
为什么会这样?更重要的是,我应该一直用引号括起数字默认值吗?
解决方法:
当然,SHOW CREATE TABLE不会检索原始的CREATE TABLE代码.即使它实际存储在某个地方,它也不一定会反映当前的表定义(您可以随后按照需要更改ALTER TABLE).该代码需要根据需要重新创建. MySQL服务器主要用C语言编写,带有一些C位.我不能肯定地告诉它(我只是猜测,因为我知道很少C并且我不熟悉MySQL代码库)但是这样做的功能可能是this:
int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
HA_CREATE_INFO *create_info_arg, bool show_database)
…调用this other one:
static bool print_default_clause(THD *thd, Field *field, String *def_value,
bool quoted)
如果你查看源代码,你会发现它是一个冗长乏味的字符串连接,跨越数百行. (C是闪电般快速,因为它比现代高级语言更接近机器,但这是以不太适合快速开发为代价的.)
没有必要引用一个数字.但是,几年前编写此代码生成器的人并不关心这个细节. MySQL会在需要时自动将字符串转换为数字,结果会更好或更差:
mysql> SELECT 1+99, '1'+99, '1x' + '99x', '1' + 'x99';
+------+--------+--------------+-------------+
| 1+99 | '1'+99 | '1x' + '99x' | '1' + 'x99' |
+------+--------+--------------+-------------+
| 100 | 100 | 100 | 1 |
+------+--------+--------------+-------------+
1 row in set, 3 warnings (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+-----------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '99x' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '1x' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'x99' |
+---------+------+-----------------------------------------+
3 rows in set (0.00 sec)
由于引用的数字来自实际列的实际默认值,因此它永远不会是无效的数字(否则您无法创建表).所以这不是什么大问题.
总结一下:该代码只是某人多年前写过的模板,它并不是一个风格指南或编码标准.
内容总结
以上是互联网集市为您收集整理的mysql – 为什么整数DEFAULT值会得到引号?全部内容,希望文章能够帮你解决mysql – 为什么整数DEFAULT值会得到引号?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。