Welcome to Snooda's Blog
    mysql中经常用到的字段类型就是varchar和char。一般还会指定长度用来规定最长可以支持多长的内容。那么问题就来了。对于utf8字符集来讲。一个字符所占的空间是1-6字节不等的。那么varchar(100)是指的字节数还是字符数呢?


    可以通过mysql官方文档来看:
    http://dev.mysql.com/doc/refman/5.0/en/char.html
    

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

    即支持的是30个字符(characters),而不是30字节(bytes)

    经测试,结果也是符合文档的。varchar(30)可以存储30个汉字


    附加问题:如果传入了超出长度的内容,会有什么结果。

If strict SQL mode is not enabled and you assign a value to a CHAR or VARCHAR column that exceeds the column's maximum length, the value is truncated to fit and a warning is generated.

     文档中提到。默认情况下会截断而不返回错误。如果需要返回错误,需要开启strict mode










Tags: ,

mysql5.5禁用innodb引擎方法

[| 不指定 2012/05/30 13:44]
    今天发现有一个备份的mysql数据文件夹异常变大,一查发现是多了三个文件:ibdata1      ib_logfile0  ib_logfile1,前者18m,后两个各5m,原来是迁移的时候从mysql5.0迁移到了5.5,而5.5关闭innodb启动不起来,于是我就开启了innodb,由于innodb会默认增加这几个数据文件和日志文件,导致变大。尝试设置数据文件的大小,结果告诉我最小10m,还是太大,于是探索关闭innodb的方法。
    看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句:

default-storage-engine=MYISAM
innodb=OFF

重启mysql,然后删掉那三个讨厌的文件即可。





Tags:
    wp的速度慢是出了名的,主要是因为php的执行速度比较慢,页面间require的层数比较多,除了关闭不必要的插件外,在php端做字节码缓存也有不错的效果,开启字节码缓存很简单,相关的php扩展也有很多个,在这里选了apc扩展,直接apt-get install php-apc然后重启php即可。经试验发现wp的执行时间缩短了一半以上,效果相当的不错。


    然后发现mysql信息里提示慢查询的数量比较多,可惜之前没有开启记录,在my.cnf里加上如下三条即可。

log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

记录执行时间超过2秒的和没有用到索引的查询日志到mysql-slow.log中,这样就可以对sql语句进行调优了。



Tags: ,
    现在数据定期备份,使用的命令是mysqldump -uabc -pabc --lock-all-tables --all-databases > db.sql

    那么备份用的账号需要哪些权限才能进行这些操作呢?

    首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。

    这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。


Tags:
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]