记录生活点滴.

php连接oracle乱码问题 终于解决

对于我这个菜鸟根本不懂php,让我去修改php+++oracle的中文乱码,实在是头痛,搞了三天没有整好,今天去细细深究终于OK了,

1.首先排出是apahce的问题,因为我在网上看过他人的文档说是apache的httpd.conf问题,结果不是.
2.我的oracle数据库是zhs16gbk编码,php实际是utf-8.
3.在官网上查看到在php里有一个文件db.inc.php里面有个配置问题:
原来的:  $DB['DB']= ociplogon($DB['USER'], $DB['PASSWORD'], $connect);//有的是oci_connect,其实一样的。
修改后的:$DB['DB']= ociplogon($DB['USER'], $DB['PASSWORD'], $connect,’zhs16gbk’);  //这里用的是GB2312编码
参考资料:http://www..net/manual/en/function.-pconnect.

Popularity: 1%

mysql 1064 USING BTREE问题

从服务器上通过mysqldump命令导出文件

在导入到另外的库时,提示:

返回:

ERROR 1064 (42000) at line 1972: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘) ENGINE=MyISAM DEFAULT CHARSET=utf8′ at line 13

经查找是mysql版本的问题,导入的库是 server version: 5.0.22,导出的库5.1.41.

打开导出的mysql文件,搜索“USING BTREE”
KEY `code` (`code`) USING BTREE,
修改成
KEY `code`USING BTREE(`code`)

重新导入,问题解决。

 

Popularity: 2%

Red Hat Enterprise Linux 5 环境下安装编译Apache + MySQL + PHP

所需软件:
:   httpd-2.2.10.tar.gz
:    -5.0.67.tar.gz
:        -5.2.6.tar.gz
ZendOptimiter-3.3.3--glibc23-i386.tar.gz
libpng-1.2.32.tar.gz
gd-2.0.36rc1.tar.gz
freetype2-.2.3.7.tar.bz2
curl-7.19.0.tar.gz
libxml2-2.7.2.tar.gz
jiegsrc.v6b.tar.gz
zlib-1.2.3.tar.gz
这些软件网上都有下载,我就不提供下载了,自己上Google找。

一、安装Apache:
# tar -zxvf httpd-2.2.10.tar.gz (tar 这个命令不懂的自己上Google查)
(其实在输入文件名时有个简单的技巧,按tab键补全。)
# cd httpd-2.2.10
#mkdir /usr/local/apache2   //建立一个apache2目录,这个目录是apahce的安装位置
#./configure –prefix=/usr/local/apache2 –enabel-so  //./configure 这个可以加-h来提供帮助,所有的选项都有解释的。
#make;make clean;make install  //这里加个make clean是防止以前有编译过的.

二、安装MySQL
#tar -zxvf mysql-5.0.67.tar.gz
#cd mysql-5.0.67
#groupadd mysql
#useradd -g mysql mysql
#mkdir /usr/local/mysql
#mkdir /usr/local/mysql/data
#./configure  –enable-thread-safe-client –with-mysqld-user=mysql –with-charset=utf8–-prefix=/usr/local/mysql5
#make clean,make,make install
#/usr/local/mysql/bin/mysql_install_db

三、安装GD库等软件
1、安装libxml2-2.7.2.tar.gz
#tar -zxvf libxml2-2.7.2.tar.gz
#cd libxml2-2.7.2
#mkdir /usr/local/modules
#mkdir /usr/local/modules/libxml
#./configure –prefix=/usr/local/modules/libxml
#make clean,make,make install

2、安装libpng-1.2.32.tar.gz
#tar -zxvf libpng-1.2.32.tar.gz
#cd libpng-1.2.32
#cp scripts/makefile.std makefile
编辑 makefile 将 prefix 改为 prefix=/usr/local/libpng2
#make
#mkdir /usr/local/modules/libpng
#make install

3、安装freetype2-2.3.7.tar.gz
#tar -zxvf freetype2-2.3.7.tar.gz
#cd freetype2-2.3.7
#mkdir /usr/local/modules/freetype
#./configure –prefix=/usr/local/modules/freetype
#make,make clean,make install

4、安装jpegsrc.v6b.tar.gz
#tar -zxvf jpegsrc.v6b.tar.gz
#cd jpegsrc.v6b
#mkdir /usr/local/modules/jpeg
#mkdir /usr/local/modules/jpeg/bin
#mkdir /usr/local/modules/jpeg/lib
#mkdir /usr/local/modules/jpeg/inculde
#mkdir /usr/local/modules/jpeg/man
#mkdir /usr/local/modules/jpeg/man/man1
#make install-lib
#make clean
#make
#make install

5,安装zlib-1.2.3.tar.gz
#tar -zxvf zlib-1.2.3.tar.gz
#cd zlib-1.2.3
#mkdir /usr/local/modules/zlib
#./configure –prefix=/usr/local/modules/zlib
#make clean
#make
#make install

6、安装curl-7.19.0.tar.gz
#tar -zxvf curl-7.19.0.tar.gz
#cd curl-7.19.0
#mkdir /usr/local/modules/curl
#./configure –prefix=/usr/local/modules/curl
#make,make clean,make install

7、安装gd-2.0.36rc1.tar.gz
#tar -zxvf gd-2.0.36rc1.tar.gz
#cd gd-2.0.36rc1
#mkdir /usr/local/modules/gd
#./configure –prefix=/usr/local/modules/gd –with-png=/usr/local/modules/libpng –with-freetype=/usr/local/modules/freetype –with-jpeg=/usr/local/modules/jpeg –with-zlib=/usr/local/modules/zlib
#make clean,make,make install

四、安装PHP
#tar -zxvf php-5.2.6.tar.gz
#cd php-5.2.6
#mkdir /usr/local/php5
#./configure –prefix=/usr/local/php5 –with-apxs2=/usr/local/apache2/bin/apxs  –with-mysql=/usr/local/mysql –with-zlib=/usr/local/modules/zlib –with-xml=/usr/local/modules/libxml –with-jpeg-dir=/usr/local/modules/jpeg –with-freetype-dir=/usr/local/modules/freetype–with-curl-dir=/usr/local/modules/curl –with-gd-dir=/usr/local/modules/gd
#make clea,make,make install
#cp  php.ini-dist /usr/local/php5/etc/php.ini

添加PHP到Apache中
#vi /usr/local/apahce2/conf/httpd.conf
(1)在httpd.conf文件相应的地方添加下面几行(如果在安装php5时,有的配置可以已经加上了,就不需要再重新添加了)
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
在DirectoryIndex index.html index.html.var 后面添加index.php

六、安装Zend
#tar -zxvf zendoptimizer-3.3.3-linux-glibc23-i386.tar.gz
#cd zendoptimizer-3.3.3-linux-glibc23-1.386
#./install.sh
安装过程中,需要输入php.ini的位置,和确定Apache的位置。

安装都结束了,最后来测试。
在/usr/local/apache2/htdocs建立一个phpinfo.php
#vi /usr/local/apache2/htdocs/phpinfo.php
<?php
phpinfo();
?>
在浏览器里打开localhost\phpinfo.php如果没问题的话就会显示php的信息了。

Popularity: 2%

Sphinx 在windows下安装使用[支持中文全文检索]

本文旨在提供一种便捷的方式让Sphinx在windows下安装配置以支持中文全文检索,配置部分在linux下通用。

一、关于Sphinx

是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系作者(Sphinxsearch.com)以获得商业授权。

一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与 SQL数据库和脚本语言集成。

当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。

搜索API支持PHP、Python、Perl、Rudy和Java,并且也可以用作MySQL存储引擎。搜索API非常简单,可以在若干个小时之 内移植到新的语言上。

Sphinx特性:

高速的建立索引(在当代CPU上,峰值性能可达到10MB/秒);
高性能的搜索(在2–4GB的文本数据上,平均每次检索响应时间小于0.1秒);
可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M文档);
提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;
支持分布式搜索;

提供文件的摘录生成;
可作为MySQL的存储引擎提供搜索服务;
支持布尔、短语、词语相似度等多种检索模式;
文档支持多个全文检索字段(最大不超过32个);
文档支持多个额外的属性信息(例如:分组信息,时间戳等);
停止词查询;
支持单一字节编码和UTF-8编码;
原生的MySQL支持(同时支持MyISAM和InnoDB);

原生的PostgreSQL支持.

中文手册可以在这里获得,感谢译者的辛勤工作。

二、Sphinx在windows上的安装

1.直接在http://www.sphinxsearch.com/downloads.html找到最新的 windows版本,我这里下的是Win32 release binaries with MySQL support,下载后解压在 D:\sphinx目录下;

2.在D:\sphinx\下新建一个data目录用来存放索引文件, 一个log目录方日志文件,复制D:\sphinx\sphinx.conf.in到D:\sphinx\bin\sphinx.conf(注意修改文件 名);

3.修改D:\sphinx\bin\sphinx.conf,我这里 列出需要修改的几个:

type        =  # 数据源,我这里是mysql
sql_host    = localhost # 数据库服务器
sql_user    = root # 数据库用户名
sql_pass    = '' # 数据库密码
sql_db      = test # 数据库
sql_port    = 3306 # 数据库端口
sql_query_pre   = SET NAMES utf8 # 去掉此行前面的注释,如果你的数据库是uft8编码的
index test1
{
# 放索引的目录
 path   = D:/sphinx/data/
# 编码
 charset_type  = utf-8
 #  指定utf-8的编码表
 charset_table  = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
 # 简单分词,只支持0和1,如果要搜索中文,请指定为1
 ngram_len    = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
 ngram_chars   = U+3000..U+2FA1F
}
# index test1stemmed : test1
# {
 # path   = @CONFDIR@/data/test1stemmed
 # morphology  = stem_en
# }

# 如果没有分布式索引,注释掉下面的内容

# index dist1
# {
 # 'distributed' index type MUST be specified
 # type    = distributed
 # local index to be searched
 # there can be many local indexes configured
 # local    = test1
 # local    = test1stemmed
 # remote agent
 # multiple remote agents may be specified
 # syntax is 'hostname:port:index1,[index2[,...]]
 # agent    = localhost:3313:remote1
 # agent    = localhost:3314:remote2,remote3
 # remote agent connection timeout, milliseconds
 # optional, default is 1000 ms, ie. 1 sec
 # agent_connect_timeout = 1000
 # remote agent query timeout, milliseconds
 # optional, default is 3000 ms, ie. 3 sec
 # agent_query_timeout  = 3000
# }
# 搜索服务需要修改的部分
searchd
{
 # 日志
 log     = D:/sphinx/log/searchd.log
 # PID file, searchd process ID file name
 pid_file   = D:/sphinx/log/searchd.pid
 # windows下启动searchd服务一定要注释掉这个
 # seamless_rotate  = 1
}

4.导入测试数据

C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot test<d:/sphinx/example.sql

5.建立索引

D:\sphinx\bin>indexer.exe –all
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file ‘./sphinx.conf’…
indexing index ‘test1′…
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.101 sec, 1916.30 bytes/sec, 39.72 docs/sec

D:\sphinx\bin>

6.搜索’test’试试

D:\sphinx\bin>search.exe test
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file ‘./sphinx.conf’…
index ‘test1′: query ‘test ‘: returned 3 matches of 3 total in 0.000 sec

displaying matches:
1. document=1, weight=2, group_id=1, date_added=Wed Nov 26 14:58:59 2008
id=1
group_id=1
group_id2=5
date_added=2008-11-26 14:58:59
title=test one
content=this is my test document number one. also checking search within
phrases.
2. document=2, weight=2, group_id=1, date_added=Wed Nov 26 14:58:59 2008
id=2
group_id=1
group_id2=6
date_added=2008-11-26 14:58:59
title=test two
content=this is my test document number two
3. document=4, weight=1, group_id=2, date_added=Wed Nov 26 14:58:59 2008
id=4
group_id=2
group_id2=8
date_added=2008-11-26 14:58:59
title=doc number four
content=this is to test groups

words:
1. ‘test’: 3 documents, 5 hits
D:\sphinx\bin>

都所出来了吧。

6.测试中文搜索

修改test数据库中documents数据表,

UPDATE `test`.`documents` SET `title` = ‘测试中文’, `content` = ‘this is my test document number two,应该搜的到吧’ WHERE `documents`.`id` = 2;

重建索引:

D:\sphinx\bin>indexer.exe –all

搜索’中文’试试:

D:\sphinx\bin>search.exe 中文
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file ‘./sphinx.conf’…
index ‘test1′: query ‘中文 ‘: returned 0 matches of 0 total in 0.000 sec

words:
D:\sphinx\bin>

貌似没有搜到,这是因为windows命令行中的编码是gbk,当然搜不出来。我们可以用程序试试,在D:\sphinx\api下新建一个 foo.php的文件,注意utf-8编码

<?
require ‘sphinxapi.php’;
$s = new SphinxClient();
$s->SetServer(‘localhost’,3312);
$result = $s->Query(‘中文’);
var_dump($result);
?>

启动Sphinx searchd服务

D:\sphinx\bin>searchd.exe
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

WARNING: forcing –console mode on Windows
using config file ‘./sphinx.conf’…
creating server socket on 0.0.0.0:3312
accepting connections

执行PHP查询:

php d:/sphinx/api/foo.php

结果是不是出来?剩下的工作就是去看手册,慢慢摸索高阶的配置。

Popularity: 2%

MySQL.com被SQL注入攻击 用户密码数据被公布

据来自Sucuri博客的消息,MySQL官方网站MySQL.com被SQL注入攻击(blind SQL injection)。一篇博客文章(.com Vulnerable To Blind SQL Injection Vulnerability)披露了MySQL.com数据库的漏洞及数据库结构的dump部分。

Vulnerable Target : http://mysql.com/customers/view/index.html?id=1170

Host IP : 213.136.52.29

Web Server : /2.2.15 (Fedora)

Powered-by : /5.2.13

Injection Type : MySQL Blind

Current DB : web

攻击者通过MySQL.com上查看用户的页面进入,获取到了数据库、表及存储用户密码的dump数据(如何获取并未公布)。如果你在 MySQL.com有用户,建议尽快更改密码。

更严重的是,攻击者将用户密码数据公布在网上让其他人进行破解。更糟糕的是MySQL产品负责人的密码已被破解(竟然是4位数 字),blogs.mysql.com的多个用户的密码也被破解。

MYSQL官方目前没有任何回应。

Popularity: 2%

2011-03-10Databases

没有评论
286 views

mysql 修改用户密码和授予用户权限或新添加一个用户

使用 mysqladmin 命令行 修改 用户名密码的方式。最正确的格式如下:

D:\\bin>mysqladmin -u root -p password 123456

接下来会提示

Enter password:

输入这个命令后,需要输入root的原密码,然后root的密码将改为123456。如果你是第一次登陆还没修改过密 码,直接回车就可以了(我使用的是mysql5.0版本,4.0以前版本初始密码都是root)。

这是 root 密码就修改成了  123456 。

不要使用下面这种格式,否则密码就修改成了 ’123456′ 这个8位字符,而不是6位的了。

D:\mysql\bin>mysqladmin -u root -p password ’123456′

 

还有一种就是用SET PASSWORD 命令修改:

mysql> set password for root@’localhost’ = password(‘新密码’);
Query OK, 0 rows affected (0.02 sec)

新增加一个具有某些权限的用户:

grant   all   privileges(所有权限)   on   depot_development.*(在depot_development的所有表上)   to   ‘dave ‘@ ‘localhost ‘(用户)identified   by   ’123456 ‘(用户密码:123456);

mysql修改root密码,增加远程权限

一、mysql默认是未开启远程连接的,我们在进行数据 库的时候,一般会将root用户的密码改掉,且增加一个实际要操作数据 库的远程用户。

修 改root的密码,如下:

UPDATE user SET Password=OLD_PASSWORD(‘sfboy’) WHERE user = ’root

其中sfboy是要修改的密码,这里改成你指定的密码即可
二、增加一个实际要操作的 远程用户,如下:

grant all on *.* to A@’%' identified by ’B';
其中 all 指定相关的操作, *.*说明数据库和表名, A表示用户名,‘%’这里写Host名称,允许所有就用‘%’,‘B’是密码。这里改成相应的值后
进行操作就行了。
运行grant后,要进行flush privileges,完成添加用户后要的重新启动mysql服务

grant all on bbsftp to bbsftp@’%’ identified by ‘密码’; 

实例:

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’IDENTIFIED BY ‘root’ WITH GRANT

OPTION;

Query OK, 0 rows affected (0.00 sec)

 

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

其实这里是新添加了一个root用户,这个root用户和mysql安装时默认的root用户有着相同的权限,
并且有远程访问的权限。

Popularity: 2%

2011-02-10Databases,PHP

没有评论
261 views

数据库技巧——MySQL十大优化技巧

WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。

1. 优化你的MySQL查询缓存

在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多次时,如果 结果是从缓存中提取,那是相当快的。

但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它。在有些处理任务中,我们实际上是可以阻止查询缓存工作的。

1. // query cache does NOT work

2. $r = _query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);

3.

4. // query cache works!

5. $today = date(“Y-m-d”);

6. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= ‘$today’”);

7.

8. // query cache does NOT work

9. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);

10.

11. // query cache works!

12. $today = date(“Y-m-d”);

13. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= ‘$today’”);

2. 用EXPLAIN使你的SELECT查询更加清晰

使用EXPLAIN关键字是另一个MySQL优化技巧,可以让你了解MySQL正在进行什么样的查询操作,这可以帮助你发现瓶颈的所在,并显示出查 询或表结构在哪里出了问题。

EXPLAIN查询的结果,可以告诉你那些索引正在被引用,表是如何被扫描和排序的等等。

实现一个SELECT查询(最好是比较复杂的一个,带joins方式的),在里面添加上你的关键词解释,在这里我们可以使用phpMyAdmin, 他会告诉你表中的结果。举例来说,假如当我在执行joins时,正忘记往一个索引中添加列,EXPLAIN能帮助我找到问题的所在。

添加索引到group_id field后

3. 利用LIMIT 1取得唯一行

有时,当你要查询一张表是,你知道自己只需要看一行。你可能会去的一条十分独特的记录,或者只是刚好检查了任何存在的记录数,他们都满足了你的 WHERE子句。

在这种情况下,增加一个LIMIT 1会令你的查询更加有效。这样数据库引擎发现只有1后将停止扫描,而不是去扫描整个表或索引。

1. // do I have any users from Alabama?

2. // what NOT to do:

3. $r = mysql_query(“SELECT * FROM user WHERE state = ‘Alabama’”);

4. if (mysql_num_rows($r) > 0) {

5.     // …

6. }

7. // much better:

8. $r = mysql_query(“SELECT 1 FROM user WHERE state = ‘Alabama’ LIMIT 1″);

9. if (mysql_num_rows($r) > 0) {

10.     // …

11. }

4. 索引中的检索字段

索引不仅是主键或唯一键。如果你想搜索表中的任何列,你应该一直指向索引。

5. 保证连接的索引是相同的类型

如果应用程序中包含多个连接查询,你需要确保你链接的列在两边的表上都被索引。这会影响MySQL如何优化内部联接操作。

此外,加入的列,必须是同一类型。例如,你加入一个DECIMAL列,而同时加入另一个表中的int列,MySQL将无法使用其中至少一个指标。即 使字符编码必须同为字符串类型。

1. // looking for companies in my state

2. $r = mysql_query(“SELECT company_name FROM users

3.     LEFT JOIN companies ON (users.state = companies.state)

4.     WHERE users.id = $user_id”);

5.

6. // both state columns should be indexed

7. // and they both should be the same type and character encoding

8. // or MySQL might do full table scans

6. 不要使用BY RAND()命令

这是一个令很多新手程序员会掉进去的陷阱。你可能不知不觉中制造了一个可怕的平静。这个陷阱在你是用BY RAND()命令时就开始创建了。

如果您真的需要随机显示你的结果,有很多更好的途径去实现。诚然这需要写更多的代码,但是能避免性能瓶颈的出现。问题在于,MySQL可能会为表中 每一个独立的行执行BY RAND()命令(这会消耗处理器的处理能力),然后给你仅仅返回一行。

1. // what NOT to do:

2. $r = mysql_query(“SELECT username FROM user ORDER BY RAND() LIMIT 1″);

3. // much better:

4. $r = mysql_query(“SELECT count(*) FROM user”);

5. $d = mysql_fetch_row($r);

6. $rand = mt_rand(0,$d[0] – 1);

7.

8. $r = mysql_query(“SELECT username FROM user LIMIT $rand, 1″);

7. 尽量避免SELECT *命令

从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要操作的时间,还是在数据库服务器与WEB服务器是独立分开的情况下。你将会经历非常漫长的 网络延迟,仅仅是因为数据不必要的在服务器之间传输。

始终指定你需要的列,这是一个非常良好的习惯。

1. // not preferred

2. $r = mysql_query(“SELECT * FROM user WHERE user_id = 1″);

3. $d = mysql_fetch_assoc($r);

4. echo “Welcome {$d['username']}”;

5. // better:

6. $r = mysql_query(“SELECT username FROM user WHERE user_id = 1″);

7. $d = mysql_fetch_assoc($r);

8. echo “Welcome {$d['username']}”;

9. // the differences are more significant with bigger result sets

8. 从PROCEDURE ANALYSE()中获得建议

PROCEDURE ANALYSE()可让MySQL的柱结构分析和表中的实际数据来给你一些建议。如果你的表中已经存在实际数据了,能为你的重大决策服务。

9. 准备好的语句

准备好的语句,可以从性能优化和安全两方面对大家有所帮助。

准备好的语句在过滤已经绑定的变量默认情况下,能给应用程序以有效的保护,防止SQL注入攻击。当然你也可以手动过滤,不过由于大多数程序员健忘的 性格,很难达到效果。

1. // create a prepared statement

2. if ($stmt = $mysqli->prepare(“SELECT username FROM user WHERE state=?”)) {

3.     // bind parameters

4.     $stmt->bind_param(“s”, $state);

5.     // execute

6.     $stmt->execute();

7.     // bind result variables

8.     $stmt->bind_result($username);

9.     // fetch value

10.     $stmt->fetch();

11.     printf(“%s is from %s\n”, $username, $state);

12.     $stmt->close();

13. }

10. 将IP地址存储为无符号整型

许多程序员在创建一个VARCHAR(15)时并没有意识到他们可以将IP地址以整数形式来存储。当你有一个INT类型时,你只占用4个字节的空 间,这是一个固定大小的领域。

你必须确定你所操作的列是一个UNSIGNED INT类型的,因为IP地址将使用32位unsigned integer。

1. $r = “UPDATE users SET ip = INET_ATON(‘{$_SERVER['REMOTE_ADDR']}’) WHERE user_id = $user_id”;

Popularity: 1%

SQL Server数据库服务器高性能设置

数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。

下面是进行笼统的技术点说明,为的是让大家有一个整体的概念,如果想深入可以逐个击破;    

希望大家能一起补充完善。

<!–[if !supportLists]–>一、<!–[endif]–>服务器规划:

<!–[if !supportLists]–>1.      <!–[endif]–>使用64位的操作系统,最好是2008的;(Windows Server 2008 64位)

<!–[if !supportLists]–>2.      <!–[endif]–>使用64位的数据库程序,最好是2008的;( 2008 64位)

<!–[if !supportLists]–>3.      <!–[endif]–>使用千兆网卡;

<!–[if !supportLists]–>4.      <!–[endif]–>使用硬RAID5;

<!–[if !supportLists]–>5.      <!–[endif]–>使用64K的簇大小;

<!–[if !supportLists]–>6.      <!–[endif]–>LUN0用作系统盘,LUN1用作程序(主要是数据库程序)安装盘,LUN2用作数据库文件盘,动态盘;

<!–[if !supportLists]–>二、<!–[endif]–>系统设置:

如果服务器使用的配置是:Windows Server 2003 x86 + SQL Server 2005 x86 + 12G内存

<!–[if !supportLists]–>1.      <!–[endif]–>使用Windows Server 2003 Enterprise Edition,如果有可能的话也可以使用Windows 2003 Datacenter Edition;

<!–[if !supportLists]–>2.      <!–[endif]–>在boot.ini中启用pae;

<!–[if !supportLists]–>3.      <!–[endif]–>使用gpedit.msc设置【内存中锁定页】;

<!–[if !supportLists]–>4.      <!–[endif]–>设置虚拟内存到系统盘之外的物理磁盘中,如果是同一块物理磁盘,分到其它逻辑分区也可以;设置大小看情况而定;

<!–[if !supportLists]–>5.      <!–[endif]–>去掉【最大化文件共享数据吞吐量】,选择【最大化网络应用程序数据吞吐量】

<!–[if !supportLists]–>三、<!–[endif]–>数据库设置:

<!–[if !supportLists]–>1.      <!–[endif]–>设置数据库的AWE,如果是16G的内存,一般是分配80%内存给数据库程序使用;

<!–[if !supportLists]–>2.      <!–[endif]–>设置数据库实例的增长为10%,具体需要设置多少需要看你的业务需要,其目的就是尽量减少磁盘空间的分配次数还有较少磁盘碎片的产生;

<!–[if !supportLists]–>3.      <!–[endif]–>设置数据库实例的恢复模式为简单模式,如果在可以的情况下;

<!–[if !supportLists]–>4.      <!–[endif]–>设置TempDB的大小,一般来说可以给到4G以上,看具体需要和环境;

<!–[if !supportLists]–>5.      <!–[endif]–>把除了SQL Server和SQL Server Browser 的其它数据库服务都停止掉,除非你有使用到这些服务的需要;

<!–[if !supportLists]–>四、<!–[endif]–>数据库设计:

<!–[if !supportLists]–>1.      <!–[endif]–>表分区;(单台数据库服务器)

<!–[if !supportLists]–>2.      <!–[endif]–>事件复制读写分离;(两台数据库服务器)

<!–[if !supportLists]–>3.      <!–[endif]–>对等事务复制;(多台数据库服务器)

<!–[if !supportLists]–>五、<!–[endif]–>SQL优化:

<!–[if !supportLists]–>1.      <!–[endif]–>创建合适的索引;

<!–[if !supportLists]–>2.      <!–[endif]–>减少游标的使用;

<!–[if !supportLists]–>3.      <!–[endif]–>可以考虑CLR编程,比如一些频繁查询并且变动很小的表;

<!–[if !supportLists]–>4.      <!–[endif]–>使用批量操作,减少频繁而小的操作;

<!–[if !supportLists]–>5.      <!–[endif]–>这里的调优细节很多,大家可以慢慢深入了解;

Popularity: 1%

2010-11-22Databases

没有评论
470 views

MySQL不能删除外键,报错 Error on rename of ‘./ruler/test2child’ to ‘./ruler/#sql2-298-9

曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方。
例子如下:

> ALTER TABLE ruler.test2child DROP FOREIGN KEY test;
ERROR 1025 : Error on rename of ”./ruler/test2child” to ”./ruler/#sql2-298-8f” (errno:
152)
    这里并不是不能删除外键,而是使用了错误的外键名称,但是MySQL报的错实在离谱。
正确的错误信息要如下查询才能知道:
mysql> show innodb status;
————————
LATEST FOREIGN KEY ERROR
————————
071222 20:48:26 Error in dropping of a foreign key constraint of table
"ruler"."test2child",
in SQL command
ALTER TABLE ruler.test2child DROP FOREIGN KEY test
Cannot find a constraint with the given id "test".

    另外外键的其他操作也有类似情况:
比如外键 新建报错:
Can”t create table ”ruler.#sql-298_92” (errno: 150)

show innodb status;
————————
LATEST FOREIGN KEY ERROR
————————
071222 20:18:57 Error in foreign key constraint of table ruler/#sql-298_8d:
FOREIGN KEY (test2code) REFERENCES ruler.test2 (test) on delete set null:
You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.

测试数据库版本为:MySql5.1

Popularity: 1%

2010-11-22Databases

没有评论
242 views

MySQL单表多字段模糊查询解决方法

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段

例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。

可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:

  1. 在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
  2. 使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。

在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:

CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。

因此,前文的查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’

Popularity: 1%

返回顶部