使用Mysql遇到的几个数据类型/格式的问题
来源:互联网 发布:淘宝开户流程 编辑:程序博客网 时间:2024/05/19 04:05
1.首先说下数据长度超长的问题
Mysql里当你的实际数据的长度,超过字段定义的长度后,而sql_mode模式又不是STRICT_TRANS_TABLES模式的话,Mysql默认会(只出现内部警告而不会显式的抛出错误信息)把数据截取成一个“错误”的最大值存储
oracle中会直接抛出错误信息,不需要什么设置。
或许应该合理的设置mysql的sql_mode
http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
http://www.jb51.net/article/28018.htm
2.枚举型的问题
第一次接触使用这个数据类型时,很喜欢她,喜欢归喜欢,使用时却也得注意,尤其是用数字做为枚举成员,不注意会有“坑”^_^
(因为在做数据仓库数据探察时有童鞋只依据列值而不看列的数据类型定义,源系统是枚举型而仓库或ODS层用了数值型,就会悲剧),其实用数字做为枚举成员这个Mysql官方也是不建议使用的
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#enum
3.坑爹的date类型,看个测试代码
call test_date('2013-05-01')时程序结果只有两个结果
test1与test2b
这里要说的问题是mysql在平时查询时与存储过程中对日期类型的写法支持还不一样,比如日常查询,有一个日期列的查询条件你写成col_date='2013-5-1'是没问题能查出数据的初生婴儿用品清单
Mysql里当你的实际数据的长度,超过字段定义的长度后,而sql_mode模式又不是STRICT_TRANS_TABLES模式的话,Mysql默认会(只出现内部警告而不会显式的抛出错误信息)把数据截取成一个“错误”的最大值存储
点击(此处)折叠或打开
- CREATE TABLE test_col_overflow (
- id_tinyint TINYINT,
- id_int INT,
- name_varchar VARCHAR (8)
- ) ENGINE = INNODB DEFAULT CHARSET = utf8;
- INSERT INTO test_col_overflow (id_tinyint)
- VALUES
- (2560);
- SELECT
- *
- FROM
- test_col_overflow;
- SELECT
- @@SESSION .sql_mode;
- SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
- SELECT
- @@SESSION .sql_mode;
- INSERT INTO test_col_overflow (id_tinyint)
- VALUES
- (2560);
- SELECT
- *
- FROM
- test_col_overflow;
或许应该合理的设置mysql的sql_mode
http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
http://www.jb51.net/article/28018.htm
2.枚举型的问题
第一次接触使用这个数据类型时,很喜欢她,喜欢归喜欢,使用时却也得注意,尤其是用数字做为枚举成员,不注意会有“坑”^_^
(因为在做数据仓库数据探察时有童鞋只依据列值而不看列的数据类型定义,源系统是枚举型而仓库或ODS层用了数值型,就会悲剧),其实用数字做为枚举成员这个Mysql官方也是不建议使用的
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#enum
3.坑爹的date类型,看个测试代码
点击(此处)折叠或打开
- BEGIN
- DECLARE
- d_stat_date date;
- SET d_stat_date = DATE_FORMAT(p_stat_date, '%Y-%m-%d');
- IF d_stat_date >= '2012-01-01'
- AND d_stat_date < '2013-09-01' THEN
- SELECT
- 'test1';
- END IF;
- IF d_stat_date >= '2013-1-1' THEN
- SELECT
- 'test2';
- END IF;
- IF d_stat_date >= '2013-01-01' THEN
- SELECT
- 'test2b';
- END IF;
- IF d_stat_date >= '2013-8-1' THEN
- SELECT
- 'test3';
- END IF;
- END
call test_date('2013-05-01')时程序结果只有两个结果
test1与test2b
这里要说的问题是mysql在平时查询时与存储过程中对日期类型的写法支持还不一样,比如日常查询,有一个日期列的查询条件你写成col_date='2013-5-1'是没问题能查出数据的初生婴儿用品清单
而当你在过程中再这样使用时她却不认你了。
0 0
- 使用Mysql遇到的几个数据类型/格式的问题
- 使用mysql遇到的问题
- Mysql使用遇到的问题
- mysql使用遇到的问题
- 使用mysql遇到的问题
- 使用mysql遇到的问题
- mysql zip 格式安装和遇到的问题
- 使用python写程序时遇到的几个小问题
- 使用C语言遇到的几个小问题
- 数据类型的问题(mysql)
- 使用CURL断点续传时遇到的数据类型问题
- 记录mysql使用中遇到的问题
- 使用innobackupex备份mysql遇到的问题
- 使用mysql时遇到的各种问题
- MySQL使用中遇到的问题
- mysql使用中遇到的问题
- MYSQL使用过程中遇到的问题
- MySQL使用中遇到的一个问题
- 数据可视化 D3.js实现力导向图之一(实现按指定字段确定link的source和target)
- GridView数据绑定——DataAdapter和DataSet使用示例
- sam查看cup频率、内存、网络等
- 统计代码注释率
- ubuntu12.04 64位安装jdk
- 使用Mysql遇到的几个数据类型/格式的问题
- ubuntu serial串口连接
- [PyQt]不规则窗体的实现之一
- java 连接mysql乱码问题
- 小文件合并存储问题
- 序號的函數及row(),rank(),DENSE_RANK(),over()
- UVA 585 - Triangles(枚举)
- 静夜回望
- DP3 最长上升子序列 LIS @geeksforgeeks