萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL使用中各種問題總結

MySQL使用中各種問題總結

現在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 和 % 這兩個就成了。


GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

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:


mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+-----------------------------------------------------+

| Variable_name            | Value                                               |

+--------------------------+-----------------------------------------------------+

| character_set_client     | utf8                                                |

| character_set_connection | utf8                                                |

| character_set_database   | utf8                                                |

| character_set_filesystem | binary                                              |

| character_set_results    | utf8                                                |

| character_set_server     | utf8                                                |

| character_set_system     | utf8                                                |

| character_sets_dir       | /usr/local/mysql-5.5.17-osx10.6-x86/share/charsets/ |

+--------------------------+-----------------------------------------------------+

但是,中文數據依然無法插入,錯誤依舊,考慮庫和表的字符集的問題,更改庫字符集:

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;

確認查看各個列的字符集:


mysql> show full columns from temp_table;

+--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

| Field  | Type         | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |

+--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

| No     | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Name   | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Price  | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Count  | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Date   | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Source | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

| Export | varchar(100) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |

+--------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

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;

copyright © 萬盛學電腦網 all rights reserved