Welcome to Snooda's Blog
mysql的varchar和char长度的含义(中文长度)
[| 2015/12/07 19:22]
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
可以通过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
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,然后删掉那三个讨厌的文件即可。
看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句:
default-storage-engine=MYISAM
innodb=OFF
重启mysql,然后删掉那三个讨厌的文件即可。
php和mysql性能优化-开启缓存和慢查询日志
[| 2012/05/27 17:55]
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语句进行调优了。
然后发现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语句进行调优了。
mysql备份backup使用的账号所需权限
[| 2012/05/27 11:05]
现在数据定期备份,使用的命令是mysqldump -uabc -pabc --lock-all-tables --all-databases > db.sql
那么备份用的账号需要哪些权限才能进行这些操作呢?
首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。
这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。
那么备份用的账号需要哪些权限才能进行这些操作呢?
首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。
这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。