首页 > 数据库 > MySQL > 正文

MySQL使用中各种问题总结

2024-07-24 12:37:56
字体:
来源:转载
供稿:网友

现在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                                                | --Vevb.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. 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;

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表