Apr 10
安装bo-blog的时候还不太懂编码的问题,于是数据库的编码就选择了按照服务器的设置存取。
于是在phpmyadmin里面看到的数据,只要遇到中文,全部都是乱码,郁闷。
花了一点时间,转换了一下:
1。用我的那个后台管理程序,它有数据库备份功能,备份出来的就是UTF-8编码的了。
2。修改数据库编码。直接在phpmyadmin里面修改,或者运行
ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

3。导入第一步备份出来的数据库文件。
4。对于bo-blog,还需要修改data/config.php里面的$db_410,把后面的"0"改成"1"
哦也,问题解决拉~
Mar 13
花了n久的时间终于搞清楚了,丫丫的,真麻烦

编译:
引用
g++ -Imysql/include -Lmysql/lib -o a.out a.cpp -lmysqlclient -lz

这个mysql目录是某个mysql的源码目录,如果有安装mysql-devel可能是在/usr/ooxx/mysql,没有的话自己去down源码

#include<iostream>
#include<string>
#include<fstream>
#include"mysql.h"
using namespace std;

MYSQL * conn = NULL; //MySQL连接句柄

//读取配置
bool read_conf(string &dbhost,
               string &dbuser,
               string &dbpass,
               string &dbname){
    ifstream is("judge.conf");
    is >> dbhost >> dbuser >> dbpass >> dbname;
    return true;
}

bool query(){
    int status, state, state2;
    MYSQL_RES * res;
    MYSQL_ROW   row;
    string cmd;
    MYSQL *conn, mysql;
    string dbhost, dbuser, dbpass, dbname;
    if(read_conf(dbhost,dbuser, dbpass, dbname)){ //读取数据库
        if (mysql_init(&mysql) == NULL){
            fprintf(stderr, "初始化错误\n");
            return false;
        }
        conn = mysql_real_connect(&mysql, dbhost.c_str(), dbuser.c_str(),
                              dbpass.c_str(), dbname.c_str(), NULL,
                              "/var/run/mysqld/mysqld.sock", 0);
        if(conn == NULL){ //连接失败
            fprintf(stderr, "连接失败!\n");
            return false;
        }
    }else{ //读取配置失败
        fprintf(stderr, "读取配置失败!\n");
        return false;
    }
    cmd = "SELECT OOXX FROM OOXX";
    cout << "Command: " << cmd << endl;
    state = mysql_query(conn, cmd.c_str());
    cout << "state: " << state << endl;
    if(state != 0){//查询出错
        fprintf(stderr, "%s\n", mysql_error(conn));
        return false;
    }
    res = mysql_store_result(conn);
    cout << "affected_rows:" << conn->affected_rows << endl;
    while(row = mysql_fetch_row(res), row != NULL){
        printf("%s\n", row[0]);
    }
    return true;
}

int main(){
    query();
    return 0;
}
Dec 29

MySQL的事务功能 不指定

felix021 @ 2008-12-29 18:06 [IT » 数据库] 评论(0) , 引用(0) , 阅读(6324) | Via 本站原创
据说MySQL是从v4.0开始支持事务(Transaction)的,一直没去试过。
今天心血来潮,于是就玩了一下。

首先,mysql里面有一个状态量叫做 autocommit ,默认值是1
也就是说,当你提交一个SQL语句以后,这条语句会被立即执行并修改数据库内容(如果有必要的话)。

所以如果你想要开始一个事务,那么首先应该把这个东东设置为0,有这么几种方法:
  1. 提交SQL语句 START TRANSACTION;
  2. 提交SQL语句 BEGIN;
  3. 提交SQL语句 SET AUTOCOMMIT=0;
  4. (PHP) mysqli_autocommit($conn, false);

然后就可以开始进行你想做的数据库修改了,比如INSERT, UPDATE, DELETE

修改完以后,如果返回的结果有不对劲的地方,OK,试试
  1. 提交SQL语句 ROLLBACK;
  2. 或者(PHP) mysqli_rollback($conn);
然后你就会发现数据库好像根本没有操作过似的
(其实仔细观察的话会发现auto_increment那个字段的max值变大了-____-)

如果一切OK,那么就用这个:
  1. 提交SQL语句 COMIIT;
  2. 或者(PHP) mysqli_commit($conn);
注意,在提交COMMIT以后,数据库的改动就正式写到硬盘,不能撤销啦。

给俩例子吧:

a. 在MySQL命令行下进行的操作
mysql> use t;
mysql> CREATE TABLE `test`(`id` int primary key auto_increment, `name` char(50));
mysql> START TRANSACTION;
mysql> INSERT INTO `test` VALUES (NULL, 'a');
mysql> COMMIT;   #或者  mysql> ROLLBACK;
mysql> SELECT * FROM `test`;
看看效果如何?

OK,再来个PHP版本的:
<?php

$conn = new mysqli("localhost", "root", "123456", "t");

$conn->autocommit(false);

$res = $conn->query("INSERT INTO `test` VALUES(NULL, 'a')");

if($res)
    $conn->commit();
else
    $conn->rollback();

$conn->close();
?>
Nov 5
Cannot connect to the mysql server.Error:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

cpp可以正常编译,但是在连接数据库时会出现这个错误
是因为没有在mysql_real_connect里面指定参数,应该这样:
mysql_real_connect(ssock,"localhost","root","password","databaseName",0,"/tmp/mysql.sock",0)

如果是在mysql -uroot -p的时候出现这个错误
则应该查看一下mysql的配置文件,找到socket文件的位置如 /tmp/mysql.sock
然后 mysql -uroot -p --socket=/tmp/mysql.sock
Oct 6
所以在给whumstc做图书馆藏书情况查询系统的时候
因为觉得用SELECT COUNT(*) FROM `ooxx`是很耗时的
所以就没有做过多的分页功能,只做了首页/上页/下页/跳页。


现在发现我的想法非常愚蠢 - 会如此频繁使用的功能,MySQL怎会不优化呢
不过当时(十一)是在老家,没有网络不能查。
今天想起这个问题,于是google了一下,答案是:

使用MYISAM存储引擎的表,会保存表的记录数。
如果使用SELECT COUNT(*) FROM `table_name`;语句进行查询的时候
会直接返回该记录数。
注意使用InnoDB引擎存储的表没有这个功能
这条SQL语句也不能加上WHERE限定语句,否则将要扫描所有记录。

专门看了一下MySQL Manual的Chapter 7.2.4 MySQL怎样优化WHERE子句, 很有收获。
Oct 6

MySQL性能优化TIPS(转) 不指定

felix021 @ 2008-10-6 00:03 [IT » 数据库] 评论(0) , 引用(0) , 阅读(5168) | Via 本站原创
zz一篇,值得看看,里面包含两部分
一、启动参数优化
二. 其他小TIPS
----------------------
MySQL性能优化TIPS

作/译者:叶金荣,来源:http://imysql.cn
转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

一. 启动参数优化
修改 my.cnf (或者my.ini),加入/修改以下几行

#设定缓存的连接数,节省连接时的开销
back_log  = 64

#禁用文件系统外部锁
external-locking  = 0
Apr 16

php和mysql时间互换 不指定

felix021 @ 2008-4-16 16:02 [IT » 数据库] 评论(3) , 引用(0) , 阅读(17988) | Via 本站原创
from http://hi.baidu.com/beidu/blog/item/e3d1b7fd5a4dd31309244d5e.html

php和mysql时间互换

在mysql中有三种时间字段类型:DATETIME,DATE和TIMESTAMP。

DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据;DATE则是只有年月日以YYYY-MM-DD形式的字串;TIMESTAMP类型和PHP中的TIMESTAMP类型名字一样,但是两者基本上是不同的。
Tags: , ,
Apr 9
使用MySQLi的时候发现,输入中文进行更新的时候就会出现类似
引用
Data too long for column 'name' at row 1

这样的错误,上网搜了一下,解决办法是采用gbk或UTF-8编码。
我把所有的php脚本转换成了utf-8编码,然后在new mysqli;后面加入
@ $conn->query("SET NAMES 'utf8' ");

然后就正常了。

特别提示两点:
1。网页里面记得要在title前加上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2。上面命令里面是SET NAMES 'utf8',这里没有横杆!(不是utf-8)
Tags: , ,
分页: 2/3 第一页 上页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]