当前位置:首页 > Mysql教程 > 列表

MySQL使用中各种问题总结

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-04 10:42:14 浏览: 评论:0 

现在mysql数据库使用的人越来越多了,同时问题也是越来越多了,下面我总结了一些常用见的在mysql使用过程中碰到的一些问题解决办法.

MySQL Workbench 无法使用

之前是用的 XAMPP 的 MySQL 组件,以前的使用相对比较简单,只是把数据库导入进去之后就在 Web 上直接用了,没有发现这个组件存在的问题,今天用 MySQL Workbench 访问这个库,发现报各种错误,主要的意思是/var/folders/下的某个诡异的目录没有读写权限,更改了目录读写权限后也是错误依旧,本来猜测是 Workbench 自己的原因,后来下载的新的版本也还是不能行,查看 MySQL 数据文件夹下的 err 文件,发现这个 MySQL 服务组件居然报了n多乌七八糟的错误,看来这个服务端已经不能要了,重新下载了个官方的 MySQL for Mac 版本,mysql-5.5.17-osx10.6-x86.dmg,装上去把库也挂上去,Workbench 居然好了.

由此看来,当 Workbench 出问题的时候,先不要着急骂 Workbench,看看自己的库是不是已经危了.

MySQL 访问权限

MySQL 比较白痴,127.0.0.1 和 localhost 不知道是一码事,在权限表里面是分开的。在修改密码的时候,一开始只改了1行,把localhost 改成了 %,登陆进去也好好的,但就是看不到库,比较让人崩溃,后来把两行都重新设置了才正常,另外,如果加外面的访问 % 的时候,最好单加一行,别把原来的删掉,不然也会容易错乱.

如果新创建用户,并且开通访问权限,其实写 localhost 和 % 这两个就成了.

  1. GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; 
  2. GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; 
  3. FLUSH PRIVILEGES; 

MySQL JDBC 连接

JDBC 访问 MySQL 的连接方式有点奇怪,用 127.0.0.1 可以正常访问,但是 localhost 会被拒绝,粗略看了下原因,如果是 localhost,在连接的时候会用本地的 IP 地址直接访问,如果这个IP 地址不在 MySQL 的访问权限表里,就会被拒绝掉,这个问题在 PHP 下面就没有发生,深层次的原因有空的时候好好分析分析.

MySQL 编码

MySQL 的编码总是非常恶心,用默认的配置启动,在程序里插入中文,提示:error 1336 (HYOOO):Incorrect string values:...

首先,考虑是服务器编码的问题,在my.cnf 的[mysqld]里面添加了:

character_set_server = utf8

在 MySQL 里确认字符集已均改为utf8,代码如下:

  1. mysql> SHOW VARIABLES LIKE 'character%'; 
  2. +--------------------------+-----------------------------------------------------+ 
  3. | Variable_name            | Value                                               | 
  4. +--------------------------+-----------------------------------------------------+ 
  5. | character_set_client     | utf8                                                | 
  6. | character_set_connection | utf8                                                | --phpfensi.com 
  7. | character_set_database   | utf8                                                | 
  8. | character_set_filesystem | binary                                              | 
  9. | character_set_results    | utf8                                                | 
  10. | character_set_server     | utf8                                                | 
  11. | character_set_system     | utf8                                                | 
  12. | character_sets_dir       | /usr/local/mysql-5.5.17-osx10.6-x86/share/charsets/ | 
  13. +--------------------------+-----------------------------------------------------+ 

但是,中文数据依然无法插入,错误依旧,考虑库和表的字符集的问题,更改库字符集:

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;

依旧不行,更改原表的字符集:

ALTER TABLE temp_table DEFAULT CHARACTER SET utf8;

依旧还是不行,再继续把表默认的字符集和所有字符列,CHAR,VARCHAR,TEXT,改为新的字符集:

ALTER TABLE temp_table CONVERT TO CHARACTER SET utf8;

确认查看各个列的字符集:

  1. mysql> show full columns from temp_table; 
  2. +--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
  3. | Field  | Type         | Collation       | Null | Key | Default | Extra | Privileges                      | Comment | 
  4. +--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
  5. | No     | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  6. | Name   | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  7. | Price  | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  8. | Count  | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  9. | Date   | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  10. | Source | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  11. | Export | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
  12. +--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
  13. 7 rows in set (0.01 sec) 

终于正常.

另外加一句,如果MySQL 服务端设置好之后,JDBC 或者 PHP 连接 MySQL 中文还是有问题,那多半是 Conn 的字符集问题,最好在查询开始前加一句:SET NAMES 'utf8'; 这句相当于:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

Tags: MySQL各种问题 MySQL问题总结

分享到: