MySQL 对于 COUNT(*) 和 LIMIT 同时使用的 BUG Sun, Aug 17. 2008
对一个有 29 条记录的表进行如下操作:
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account结果 29
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account LIMIT 10结果 29
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account LIMIT 10 , 10没有结果
看来以后使用 COUNT(*) 的时候不能同时使用 LIMIT offset, row_count 这种表达方式了。
PS:如果统计全表记录,使用下面的方法会更加快捷:
- SELECT SQL_CALC_FOUND_ROWS *
- FROM sys_uia_account;
- SELECT FOUND_ROWS( ) ;
唯一需要注意的就是,这两个查询必须在一起进行,因为 SQL_CALC_FOUND_ROWS 不对结果进行任何缓存。
MySQL 中用 GKB 来让 UTF-8 字段中的中文按照拼音排序 Sat, Aug 16. 2008
UTF-8 中的中文不是按照拼音排序的,因此对于 使用 UTF-8 编码集的字段就无法按照拼音进行排序,最简单的解决方法就是转成 GBK 编码。
实例代码:
- SELECT *
- FROM `test`
- ORDER BY CONVERT( `test`.`name`
- USING GBK )
- LIMIT 0 , 30
数据库表结构:
- CREATE TABLE IF NOT EXISTS `test` (
- `id` int(3) NOT NULL AUTO_INCREMENT,
- `name` varchar(10) COLLATE utf8_bin NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
测试环境:Windows 2003 Standard Edition,MySQL 5.1.22-rc-community。
对于偶正在使用的 Symfony 框架,因为使用了 propel 做 ORM,比较难直接操作SQL,除非使用 RAW SQL,而且使用 RAW SQL会导致很多高级特性无法使用,解决方式:
- $criteria->addAscendingOrderByColumn('CONVERT(' . TestPeer::NAME . ' USING GBK)');
A few tips about how to use mysql-5.1-noinstall package Fri, Dec 28. 2007
HOW-TO Install
- Download the install package, filename is mysql-noinstall-5.1.22-rc-win32.zip in this case.
- Extract it to the installation location, traditionally, the MySQL server uses "c:\mysql", but my option is "e:\HTTPD\mysql", any location you like is OK.
- Create your own config file, it's a good idea to put this file in your MySQL server installation location, not the system path. You may create this file just containing a [mysqld] section:
- [mysqld]
- # set basedir to your installation path
- basedir=E:\\HTTPD\\mysql
- # set datadir to the location of your data directory
- datadir=E:\\HTTPD\\mysql\\data
- Install MySQL as a Windows service, use the command:
Either of the above is ok, the difference is the first command will install the service started manually. "MYSQL51" is the service name.
- mysqld --install-manual MYSQL51 --defaults-file=e:\HTTPD\mysql\my.ini
- mysqld --install MYSQL51 --defaults-file=e:\HTTPD\mysql\my.ini
- Start the service, enter this command:
- net start MYSQL51
- Now, all the steps are finished! You can use this:
to confirm your MySQL is running.
- mysql -u root
Notes
- MySQL looks for options first in the my.ini file, and then in the my.cnf file, so it's better to name the config file my.ini
- You may just modify one of the my-*.ini files and rename it to my.ini, according to your situation.
- A root use is set by default, and no root password set. So DON'T use -p option in the command below until you've set a root password.
Some useful commands
- REM Start MySQL server directly, not using Windows service
- mysqld --consol
- REM Shutdown MySQL server
- mysqladmin -u root shutdown
- REM Remove MySQL service
- mysqld --remove MYSQL51
神奇的土地上发生的神奇的错误 Thu, Dec 27. 2007
梨花体小诗一首做题记:
毫无疑问
我犯的错误
是全天下
最神奇的
在 long long ago 的某一天,偶的 Windows 2003 + Apache 2.2 + PHP 5 + MySQL 5.1 突然访问所有的页面都非常慢,打开一个页面,甚至是什么都不做的页面,都要等上好几秒钟,一个简单的 phpinfo(); 居然花了 8s。
偶的 WAMP 环境是多少年一直免安装升级上来的,这些古董配置都是偶千调万改才定下来的最优化的配置。但是就是找不到错误原因。
今天 reinstall Windows 2003,趁机全新的安装了一下 AMP 环境,发现默认配置下,PHP 页面速度非常正常,但是把 php.ini 文件修改成我要的,就立马恢复超级慢的状态。预示 diff 出所作的修改,逐条测试,直到最后发现,只要 extentions 加载 php_mysql.dll 或者 php_mysqli.dll,就会变慢,多次测试的结果都证明了这个结论。
在 Google 上使劲找和 php、mysql、slow 相关的页面,都没有任何相关的问题,难道今天偶 RP 大爆发碰到了千年不遇的超级难题?
搜索这个关键字无果,不过发现最新的 Apache 2.2 的 conf 文件结构发生了变化,于是顺便看看相关的文档,决定把自己用了 n 年的 PHP4/PHP5 共存的虚拟主机配置文件重新修正一下。偶以前都是图省事,用的是 CGI 方式驱动 PHP,关键配置如下:
- ScriptAlias /php5/ "e:/httpd/php5/"
- AddType application/x-httpd-php .php
- Action application/x-httpd-php "/php5/php-cgi.exe"
这个方法以前用的好好的,从 PHP4 就这样写,一直用到现在,虽然说效率低一点,不过开发的时候不在乎,能用就行了。最新的 Apache 2.2 里面推荐用的是 Module 方法,照猫画虎修改如下:
- LoadModule php5_module e:/HTTPD/php5/php5apache2_2.dll
- AddType application/x-httpd-php .php
- PHPIniDir "e:/HTTPD/php5"
好像很早就有这种加载的方法,汗,偶一直到现在才开始使用。当把 PHP 由 CGI 变成 Module 方式加载后,居然页面速度神奇的正常了。即使加载了 php_mysql.dll 也没有任何问题。真抓狂,实在想不出来这两个有什么关系,但是事实却是就是正确了。
同时发现最新的 Apache 的 conf 文件由以前的一个 httpd.conf 变成了以现在一个 httpd.conf 和 extra/httpd-*.conf 结合,结构更加清晰了,不错。赞 Apache 一个。
