一般在MYSQL使用中文查询
都是用 set NAMES character
character_set_client ,这是用户告诉MySQL查询是用的什么字符集。
character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。
character_set_results , MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。
DISCUZ并没有使用set NAMES character
SET NAMES 'x'语句与这三个语句等价:
mysql> SET character_set_client = x; mysql> SET character_set_results = x; mysql> SET character_set_connection = x;
而DISCUZ里面是
复制代码
代码如下:
@mysql_query("SET
character_set_connection=$dbcharset, character_set_results=$dbcharset,
character_set_client=binary", $this->link);
SET character_set_client = binary;使用二进制字符集查询
此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?
character_set_client
指
定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection指定了mysql
用来 ......
假设我们使用mysql_real_query执行了一条sql语句之后,返回值为非0值,大家都知道这是这条语句执行出错,但是我们想
了解地更详细点的话,究竟是什么原因导致了这个错误呢?这时候就得用上mysql提供的另外一个API:mysql_errno。
mysql_errno会提供最近一次调用的C API出错的信息(不见得每个API都会对这个errno进行设置,但是最常用的mysql_real_query是会的)。通过mysql_errno返回的错误码一般都有规则:比如属于区间[1000,2000)的错误是逻辑错误,比如键值冲突这种错误,这些错误是由服务器返回的;其他的比如[2000, 3000)的当然就不是逻辑错误了。
另外,如果想更加详细的信息,可以通过mysql_error函数返回一个错误信息的字符串 ......
假设我们使用mysql_real_query执行了一条sql语句之后,返回值为非0值,大家都知道这是这条语句执行出错,但是我们想
了解地更详细点的话,究竟是什么原因导致了这个错误呢?这时候就得用上mysql提供的另外一个API:mysql_errno。
mysql_errno会提供最近一次调用的C API出错的信息(不见得每个API都会对这个errno进行设置,但是最常用的mysql_real_query是会的)。通过mysql_errno返回的错误码一般都有规则:比如属于区间[1000,2000)的错误是逻辑错误,比如键值冲突这种错误,这些错误是由服务器返回的;其他的比如[2000, 3000)的当然就不是逻辑错误了。
另外,如果想更加详细的信息,可以通过mysql_error函数返回一个错误信息的字符串 ......
grant all on *.* to root@'192.168.10.131' identified by 'admin';
LOAD DATA INFILE (从文件中导入数据)
mysqldump -u pivot -p pivot news > c:\news.sql
那么还原可以mysql命令,mysql -u 用户名 -p (密码) -h 主机名 --one-database 还原数据库名 < 路径/备份名.bak,--one-database是指定要恢复的数据库.
EXA:
mysql -u pivot -p pivot news < c:\news.sql
(括号表示密码不先输入,在连接时在Enter password;若密码为空可缺省-p参数)
ALTER table FD_Task_Detail ADD(errorno smallint(6) DEFAULT NULL );(修改表结构) ......
MySQL-client-community-5.0.41-0.rhel4.i386.rpm # 客户端
MySQL-devel-community-5.0.82-0.rhel4.i386.rpm #开发时要用的头文件和C文件
MySQL-server-community-5.0.41-0.rhel4.i386.rpm #服务端
MySQL-shared-community-5.0.82-0.rhel4.i386.rpm #一些库文件
perl-DBD-MySQL-2.9004-3.1.i386.rpm
perl-DBI-1.40-5.i386.rpm ......
就我知道的两个区别:
myISAM 不支持事务
Innodb 支持事务
如果修改myISAM 为Innodb,需要把原来的数据先dump出来,清空表,在重新插入
innodb在/etc/my.cfg的配置为
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
如果这几个文件存在 ibdata1 ibdata2 ib_logfile0 ib_logfile1,则需要先删掉,重启mysql之后才能生效
mysql -u$user -p$passwd -e"use $database;START TRANSACTION;DELETE from $table;
LOAD DATA INFILE '$datafile' IGNORE INTO TABLE $table IGNORE 1 LINES;COMMIT;" ......
今天遇到数据库的一个问题,就是每当从主表中删除一个主键id时,由于与他相关联的表中有相关的字段数据,所以无法删除。查了一大堆资料,发现我建表关联用的是on Restrict.可能问题就出在这里吧。
外键约束对子表的含义:
如果在父表中找不到候选键,则不允许在子表上进行insert/update
外键约束对父表的含义:
在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下
. cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
. set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用
......