mysql的BASE64编码和解码实现
http://wi-fizzle.com/downloads/base64.sql
下面的代码来自Gist https://gist.github.com/1724446
当然了,除非特殊需要,不推荐这么使用。如果技术够的话,可以写成UDF。
汉字等还需要注意编码
使用mysql自带的mysqlslap工具测试数据库的性能,命令行的方式并不太友好,这里我们仍然介绍下jmeter来测试mysql。Jmeter使用了JDBC技术,使得可以测试任何支持JDBC技术的数据库,包括mysql,oracle,pgsql,Mssql等。我们分步演示下jmeter测试mysql的步骤。
(1) 仍然是新建测试计划,在其下新建一个线程组。并设置并发为50,不循环。
(2) 配置JDBC。在线程组上点击右键,选择添加→配置元件→JDBC Connection Configuration。配置各项参数,其中Variable Name:可以随便填写,此处填写mysql。最主要的配置是Database Connection Configuration.
Database URL:JDBC格式的数据库连接,每种数据库的URL都有所区别。Mysql的如下,jdbc:mysql://localhost:3306/test,test为数据库名称。
JDBC Driver class:JDBC驱动的名称
Username:数据库用户名
Password:数据库密码
其它配置项保持默认即可。

添加了JDBC参数后,我们还需要添加mysql的JDBC驱动。因为jmeter并没有自带这一jar包。可以到mysql官方网站找到mysql的JDBC驱动,在“测试计划”中添加class path。如图所示:

如果忘了这一步的话,将导致运行失败。
(3)添加JDBC请求。需要修改的参数包括:
OPTIMIZE TABLEshould be used if you have deleted a large part of a table or if you have made many changes to a table with variable-length rows (tables that haveVARCHAR,VARBINARY,BLOB, orTEXTcolumns). Deleted rows are maintained in a linked list and subsequentINSERToperations reuse old row positions. You can useOPTIMIZE TABLEto reclaim the unused space and to defragment the data file. After extensive changes to a table, this statement may also improve performance of statements that use the table, sometimes significantly.
1. 回收空间 Defragment
在InnoDB的维护过程中,我们总会遇到磁盘耗尽、或者InnoDB Tablespaces用完的情况。这时候,在考虑扩容等方案之前,最好先使用Optimize Table试试。如果你的表大字段(Text Blob Varchar),并且更新、删除较频繁的话,Optimize之后可能会腾出大量的空间。需要注意的是这仅仅是针对INNODB而言的2. InnoDB 和 MyISAM
目前支持optimize命令的引擎有 MyISAM, InnoDB, and ARCHIVE,对于InnoDB,会将optimize命令映射为ALTER TABLE命令,该命令会重建数据表,更新索引统计信息、回收主键索引中空间。
如果你的MySQL是有备库的,如果你只希望在主库上执行的话,那么可以加上关键字NO_WRITE_TO_BINLOG(或者LOCAL,意思完全相同)。
大家在建表时可能经常会遇到类似char和varchar这类的字段类型选择。
如有以下数据结构:
工号 姓名 部门
———————–
1 张三 财务
2 李四 人事
3 王五 销售
……..
我们定义”姓名”为char(10)(静态)的时简单地用php代码表示:
简单地模拟底层数据存储链表$data
$col_num_len =1; //工号长度为1
$col_name_len=10; //姓名长度为10
$col_unit_len =4; //部门长度为4
$col_len=$col_num_len+$col_name_len+$col_unit_len+3; //表示每笔记录的总长度,包括3个分隔符
实现如下:
$data="1|张三 |财务|2|李四 |人事|3|王五 |销售|..."; //简单地模拟底层数据存储链表
提到mysql,我顺便讲讲序列。用过oracle的人都知道,orale没有类似mysql的AUTO_INCREMENT这样的自增长字段,实现插入一条记录,自动增加1.oracle是通过sequence(序列)来完成的。这样看起来,似乎mysql的自增长要比oracle序列的实现更好更方便。那我为什么还要提序列呢?有必要吗?
(1)首先mysql的自增长“序列”和序列是两回事,mysql本身不提供序列机制。
(2)mysql的AUTO_INCREMENT可以设置起始值,但是不能设置步长,其步长默认就是1.(这里是错误的,可以通过修改系统变量设置步长,但其针对全局)
(3)mysql一个表只能有一个自增长字段。自增长只能被分配给固定表的固定的某一字段,不能被多个表共用。并且只能是数字型。
(4)在历史表和数据迁移时,经常会遇到自增主键重复的问题。
(5)自增主键往往是没意义的。
在下列情况下可能你需要使用序列:
(1)业务复杂,你需要高度定制和控制主键(自增主键只能是按数字递增的,但是序列可以随心所欲的变化,比如按照年月日生成主键。。。)
(2)你希望手工维护自增长,方便数据迁移;
(3)当事务跨多表时,期望事务可靠性;
(4)当你需要一个业务上有意义的主键时,比如单据号等(若你需要的只是一个流水号,那么用自增更方便);
(5)当你的主键很明确地需要和其他表关联时(若你的表不与其他表关联时,如日志表,自增更方便)
(6)你期望这个主键是唯一的,不需要重复利用的。
当然,序列也有缺点,主要就是程序处理麻烦,不如自增方便。oracle的自增有缓存,不用担心效率问题,而mysql只能通过触发器模拟,可能会有性能损失。