当存储一个CHAR值时, Mysql会除去尾随空间, 这个行为有点让人困惑, 用一个具体的例子来看一下: 首先 ,创建一个只有一个CHAR(10)字段的表并存储一些值在里面:
mysql> CREATE TABLE char_test( char_col CHAR(10));
mysql> INSERT INTO char_test(char_col) VALUES
-> (’string1′), (‘ string2′), (’string3 ‘);
然后检索这些值, 尾部空间被除掉了:
mysql> SELECT CONCAT(“‘”, char_col, “‘”) FROM char_test;
+—————————-+
| CONCAT(“‘”, char_col, “‘”) |
+—————————-+
| ’string1′ |
| ‘ string2′ |
| ’string3′ |
+—————————-+
阅读全文…
相关日志
String Types(字符串类型)
字符串类型
Mysql支持多种字符串类型的变体。 这些数据类型在4.1和5.0版本中有较大的变化, 这使得这些数据类型变得更加复杂。 从Mysql4.1起, 每个字符串类型能有自己的字符集和针对这些字符集的排序规则集 (更多的关于排序规则的主题, 参考第5章), 这对于性能有较大的影响。
VARCHAR和CHAR类型
VARCHAR和CHAR是两种最主要的存储字符串的数据类型, 不幸的是,的确有些困难解释这两种数据类型在磁盘和内存中是如何存储的, 因为这是与存储引擎相关的(比如, Falcon的差不多所有数1是, 请参考相应的存储引擎文档。
阅读全文…
相关日志
Real Numbers
实数
实数是具有小数部分的数字, 当然, 实数不是专门用来表示小数的, 也可以用DECIMAL来存储那些无法用INTERGER来存储的大整数。 Mysql同时支持准确的和非准确的类型。
FLOAT和DOUBLE类型支持近似的标准浮点数数学计算。 如果需要知道准确的浮点数计算, 参考具体平台的浮点数计算规则。
DECIMAL类型是用来存储准确的小数, 在mysql 5.0以后的版本, DECIMAL支持准确的数学计算。在Mysql4.1 及以前的版本中, MUMERIC类型也是用浮点计算来完成运算的, 因此可能会出现一些由于精度损失而出现的一些不准确的结果, 在这些版本的mysql中, DECIMAL是一种”存储”概念类型。
在5.0以及以后的版本, mysql自己来进行DECIMAl计算, 因为cpu没有对DECIMAL的直接支持。 当然, 浮点计算在某种程度上相对快些, 因为CPU是直接支持浮点计算的。
阅读全文…
相关日志
续 MYSQL数据库表设计与优化(一)
决定数据类型的第一步是定义所存数数据的分类: 数值型, 字符串型还是临时型等;除了一些特别的并不是那么直观的外, 这通常是很直观的。
接下来是选择具体的数据类型, 许多mysql的数据类型能存储同一种数据, 但是在可存储的数据范围, 准确度或者存储空间有些不同。 有些数据类型可能还有一些特殊的行为属性。比如, DATETIME和TIMESTAMP都能存储日期和日期, 而且都是准确到秒; 然而, TIMESTAMP占的数据空间只有DATETIME的一半, 而且是时区敏感的,同时有一些自动修改的机制。 另一个方面, 它能表示的数据范围要小些, 有些属性在某些时候是比较麻烦的。
阅读全文…
相关日志
优化糟糕设计的表结果或者索引能很大程度改进mysql的性能。 如果需要高性能, 那么就需要根据不同的操作需求精心设计表结构和索引, 这当然需要对各种查询做出性能需求评估, 因为改变一个查询或者一部分表结构设计会在其他地方引的性能。 优化通常需要做出取舍, 例如, 通过增加索引来加速查询速度会减慢修改速度; 类似的, 一个非完全按范式设计的表结构能使某些查询速度提高, 但可能会导致其他的效率降低; 增加计数器或者汇总表能有效的优化一些查询, 但是维护代价也是不菲的。
有时候, 作为开发人员的你需要做超出开发人员职责的事情去弄清楚递到你面前的开发任务, 有时候, 那些不太了解数据库系统原理的人提出的需求可能不会考虑需求的性能影响, 如果你能清楚的告诉他们这些对数据库造成大压力的小功能需要导致硬件成本成倍增加的话, 他们可能会考虑砍掉一些需求。
阅读全文…
相关日志
数据库分页是很常用的技术,下面讲了三种主流数据库的分页方法,分别是Mysql,Mssql和Oracle。
Mysql分页采用limt关键字
select * from t_order limit 5,10; #返回第6-15行数据
select * from t_order limit 5; #返回前5行
select * from t_order limit 0,5; #返回前5行
阅读全文…
相关日志
我今天写触发器,遇到一个1442错误,那个错误提示怎么也看不明白,详见这篇文章,于是去网上找了一下Msyql的错误信息,搜集了比较全的错误信息,列在这里以备以后使用。
· 错误:1401 SQLSTATE: XAE03 (ER_XAER_RMERR)
消息:XAER_RMERR: 在事务分支中出现致命错误,请检查数据一致性。
· 错误:1402 SQLSTATE: XA100 (ER_XA_RBROLLBACK)
消息:XA_RBROLLBACK: 回滚了事务分支。 阅读全文…
相关日志
关于Mysql的触发器,基本上每个Mysql教程里都有讲到,但是我发现那些教程里讲的都是如何处理其他表的数据。在Mysql中写触发器操作本表的列数据时,它的写法与操作其他表列的数据是不一样的。
我写了一个触发器,它的作用是在插入数据前,如果列name的字符串中含有”-”(中划线),则替换为” “(空格)。 阅读全文…
相关日志
很多PHP的初学者,都对于WEB页面的分页显示比较困惑,其实分页显示的原理非常简单。我顺手记下,以备不时之需。 阅读全文…
相关日志
我们要把现实世界中的各种信息转换成计算机能理解的东西,这些转换后的信息就形成了数据。例如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。数据不仅包括数字、字母、文字和其他特殊字符组成的文本形式的数据,而且还包括图形、图像、动画、影像、声音等多媒体数据。但使用最多、最基本的仍然是文本数据。
1. mysql的数据类型 阅读全文…
相关日志