禁止修改varchar到int|[运维规范]
来源:互联网 发布:java系统监控框架 编辑:程序博客网 时间:2024/06/04 18:17
在MySQL更改数据类型前一定要特别小心,分析一下是不是可行,另外在更改前,需要先进行备份,备份,备份!!!
环境描述
表结构:
CREATE TABLE `t_mobile` ( `mobile_no` varchar(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
写入数据:
root@zhishutang:mysql3306.sock [zst]>insert into t_mobile(mobile_no) values('13501245755'),('18800108001'),('13996000001');
确认数据无误:
root@zhishutang:mysql3306.sock [zst]>select * from t_mobile;+-------------+| mobile_no |+-------------+| 13501245755 || 18800108001 || 13996000001 |+-------------+3 rows in set (0.00 sec)
溢出
修改数类型:
root@zhishutang:mysql3306.sock [zst]>alter table t_mobile change mobile_no mobile_no int;Query OK, 3 rows affected, 3 warnings (0.02 sec)Records: 3 Duplicates: 0 Warnings: 3
查看警告:
root@zhishutang:mysql3306.sock [zst]>show warnings;+---------+------+----------------------------------------------------+| Level | Code | Message |+---------+------+----------------------------------------------------+| Warning | 1264 | Out of range value for column 'mobile_no' at row 1 || Warning | 1264 | Out of range value for column 'mobile_no' at row 2 || Warning | 1264 | Out of range value for column 'mobile_no' at row 3 |+---------+------+----------------------------------------------------+3 rows in set (0.00 sec)
到这里实质就可以宣布,死定了。数据已溢出。
查看数据:
root@zhishutang:mysql3306.sock [zst]>select * from t_mobile;+------------+| mobile_no |+------------+| 2147483647 || 2147483647 || 2147483647 |+------------+3 rows in set (0.00 sec)
这里真是的男人哭吧,哭吧, … 如果是线上环境,想死的心估计大家都有了,不是简单的哭了。如果没有备份,这么重要一例数据没了,有可能意为着项目也有可能受到严重的影响。
这时也不要心存幻想在改回去就好,来看一下操作,请死心!!!
root@zhishutang:mysql3306.sock [zst]>alter table t_mobile change mobile_no mobile_no varchar(11);Query OK, 3 rows affected (0.01 sec)Records: 3 Duplicates: 0 Warnings: 0root@zhishutang:mysql3306.sock [zst]>select * from t_mobile;+------------+| mobile_no |+------------+| 2147483647 || 2147483647 || 2147483647 |+------------+3 rows in set (0.00 sec)
结论
- 生产环境更数据类型明确提出: 不允许varchar 改成int.
- 更改数据前一定要做好备份,无论是update,delete,或是数据类型更改。
操作Tips: 如保备份一列数据?
select pk , 修改的列 from tb where 条件 ;
用命令行记录也可以,用outfile处理也行。
恢复可以用awk反向生成update语句:
cat bak.txt |awk ‘{print “update tb set 修改列名=“ 1”;”}
大概这样生成。 在执行恢复即可。
作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com
阅读全文
0 0
- 禁止修改varchar到int|[运维规范]
- 批量修改系统中int,varchar字段的默认值
- 批量修改系统中int,varchar字段的默认值
- 批量修改系统中int,varchar字段的默认值
- 运维规范:禁止使用hostname命令去查看主机名
- mysql int和varchar
- varchar转换为int
- mysql int varchar
- sqlserver中varchar转成int
- MySQL varchar转换为int
- mysql中varchar转int
- mysql length、varchar(int) 详解
- Sql Varchar转换为Int
- int,bigint,smallint、tinyint、varchar
- varchar int 后面长度说明
- bbed修改varchar数据
- sql语句中 int varchar互相转换
- mysql varchar类型转换int类型
- Maven 使用 webapp archetype 创建Web 应用后无法找到 java 和 test 文件夹
- 个人对linux内核中的linux_dirent64结构体的理解
- Rmi远程调用
- Hibernate之一对多双向外键关联
- ArcGIS for Android Runtime100 基本操作(一)——图层加载和切换
- 禁止修改varchar到int|[运维规范]
- gitlab安装
- 【Android】给Android Studio设置代理
- java中 servlet和jsp的概念及区别
- 一些免费的Api接口
- SpringMvc 文件上传
- Codeforces Round #430 (Div. 2)
- 通过PropertyDescriptor反射进行字段名值的获取及设置
- stm32学习笔记 F1系列GPIO相关寄存器的配置