修改root密码的时候按照网上的说的居然傻傻的执行了update user set password="asdf" where user="root";执行之后发现密码错了,进去不了,于是折腾了半天,发现mysql的密码是加密的不是明文存储的,所以改的时候需要这样set password=password("asdf")。错误已经发生了,于是就按照下面的方式去修改错误的mysql密码。
修改/etc/my.cnf在skip-slave-start后面增加一行skip-grant-tables
再登陆进去,重新修改密码,改回原来的配置就ok了。
......
【IT168 技术文档】如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。幸运的是,MySQL带有很多设计用来提供这种类型安全的加密函数。本文概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全。
双向加密
就让我们从最简单的加密开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个简单的实例:
mysql> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));
Query OK, 1 row affected (0.14 sec)
其中,Joe的密码是guessme,它通过密钥abracadabra被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示:
mysql> SELECT * from u ......
解决MySql数据乱码:
1 写过滤器设置编码格式(格式和JSP页面的编码一样),或则在请求里面写request.setCharacterEncoding("编码方式");
2 如果是查询出数据乱码,在链接的URL上加上编码格式(你这里加了,没问题);
3 修改my.ini文件里面的 default-character-set= 您要的编码格式 (一共有两处,你查找一下 改为一样的编码格式)
3 如果是写入到数据库之后是乱码(前提是已经写了过滤器处理编码),修改my.ini文件里面查找sql-mode 设置 sql-mode =
"NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
试试吧!
这是所有乱码的情况! 我用的是MYSQL5.0 解决乱码就这样搞的!!!!!!!
数据库编码采用UTF8,同样,修改连接字符串为:jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=utf8
将你的default-character-set=latin1 改成default-character-set=gbk试试.
在安装的时候选择GBK就可以.或者在MY.INI里面改也可以.
写过滤器设置编码格式。
或者是把从数据库中读出的字符先转成byte数组,在编码成utf-8,保证解决问题
解决方法:
所有的编码都使用一种如:utf8
1.数据库编码:
String dbUrl = "jdb ......
如果要随机获取记录数,在mysql里最简单的方法肯定是order
by
rand
()了,但是这种方法只能在表记录极少的情况下才能使用。主要是因为order
by
rand
()导致了using filesort.这个时候查询类型会变成all,索引会失效。只需简单的变通下,完成可以做到同样的效果。
根据记录的类型,分类连续和非连续两种。
连续指记录是连续存放的,并且有字段可以证明记录是连续的,例如自增id。
非连续是指记录是随机存放的,例如有条件的查询,结果肯定不是连续的。
一、连续记录优化
先得到表的最大id和最小id。select max(id),min(id) from table
1.在程序里随机一个在最大id和最小id的中间数,查询的时候大于这个随机数的就是随机记录了。
Sql代码
select
*
from
table
where
id > 中间数 limit length;
select * from table where id > 中间数 limit length;
缺点:如果中间数很大的话,获取不了需要的记录数,随机性不强
2.在程序里随机n个最大id和最小id的中间数,查询的时候用in获得这几个中间数的记录
Sql代码
select
*
from
table
where
......
http://www.cnblogs.com/rethink/archive/2009/10/09/1579634.html
mysql cache功能分析:
1
mysql的cache功能的key的生成原理是:把select语句按照一定的hash规则生成唯一的key,select的结果生成value,即key=>value。所以对于cache而言,select语句是区分大小写的,也区分空格的。两个select语句必须完完全全一致,才能够获取到同一个cache。
2
生成cache之后,只要该select中涉及到的table有任何的数据变动(insert,update,delete操作等),相关的所有cache都会被删除。
因此只有数据很少变动的table,引入mysql 的cache才较有意义。关于这方面的测试,可以参考:《Query Cache,看上去很美》
一文。
所以,mysql的cache功能只适用于下列场合:数据变动较少,select较多的table。
那么。在复杂的系统中,如何使用mysql的cache功能呢,基本方法如下:
配置query_cache_type,同时改写程序。
query_cache_type 0 代表不使用缓冲, 1 代表使用缓冲,2 代表根据需要使用。
设置 1 代表缓冲永远有效,如果不需要缓冲,就需要使用如下语句:
SELECT SQL_NO_CACHE * from my_table WHERE ...
如果设置为 2 ,需要开启缓冲,可以用如下语句:
SELECT SQL_CAC ......
MySQL:日期函数、时间函数总结(MySQL 5.X)
参考长文:
一、MySQL 获得当前日期时间 函数
1.1 获得当前日期+时间(date + time)函数:now()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+
除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:
current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp -- (v4.0.6)
,localtimestamp() -- (v4.0.6)
这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。
1.2 获得当前日期+时间(date + time)函数:sysdate()
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
mysql> select now(), sleep(3), now();
+---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
......