my.cnf [mysql] default-character-set = gbk [mysqld] skip-character-set-client-handshake=1 跳過mysql程序起動時的字符參數設置 ,使用服務器端字符集設置
修改不過來
[root@localhost ~]# mysql -uroot -p --default-character-set=latin1 Enter password: mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | 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/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.01 sec) mysql> set names latin1 ; //進入環境中才可以設置 Query OK, 0 rows affected (0.00 sec) mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.01 sec)
[my.cnf] [mysql] default-character-set = gbk [mysqld] character-set-client-handshake = 0
[root@localhost ~]# mysql -uroot -p --default-character-set=latin1 Enter password: mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | 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/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.01 sec) mysql> set names gbk; Query OK, 0 rows affected (0.00 sec) mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.18 sec)
[mysqld]
character-set-server = gbk skip-character-set-client-handshake=1 //使用服務端字符集
[root@localhost ~]# mysql -uroot -p --default-character-set=latin1 Enter password: mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | gbk | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | gbk | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.02 sec)
[mysqld]
character-set-server = gbk character-set-client-handshake=0 //使用服務端字符集
[root@localhost ~]# mysql -uroot -p --default-character-set=latin1
Enter password:
mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | gbk | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | gbk | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.02 sec)
[mysqld]
character-set-server = gbk
character-set-client-handshake = 1
[root@localhost ~]# mysql -uroot -p --default-character-set=latin1 Enter password: mysql> show variables like "%char%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | gbk | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | gbk | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql56/share/charsets/ | +--------------------------+------------------------------------+ 8 rows in set (0.02 sec)
mysql 字符集非交互設置:當mysql起動連到mysqld時,非手動命令
mysql字符集交互設置:通過命令行手動設置
MySQL 5.5版本解決中文亂碼問題時my.ini內
[mysqld]項中不能再寫default-character-set=utf8
來看看如何解決亂碼問題:
在mysql中默認字符集是latin1,
想要設置字符集為uft-8,可以在 my.cnf 文件中添加以下設置:
·[client]
1 |
default-character- set =utf8 |
·[mysqld]
1 |
default-character- set =utf8 |
2 |
skip-character- set -client-handshake #此處是忽略客戶端的字符集,使用服務器的設置 |
(skip語句和client中的default選一個)
當然你可以在建立數據庫是規定字符集:
1 |
create database db_name default character set utf8 callate utf8-general-ci; |
也可以在鏈接數據庫前設置:
1 |
set names 'utf8' ; |
重點在紅字上,加了skip-character-set-client-handshake,client里面就不用加default了
01 |
show variables like 'characte%' ; |
02 |
+ --------------------------+----------------------------+ |
03 |
| Variable_name | Value | |
04 |
+ --------------------------+----------------------------+ |
05 |
| character_set_client | utf8 | |
06 |
| character_set_connection | utf8 | |
07 |
| character_set_database | utf8 | |
08 |
| character_set_filesystem | binary | |
09 |
| character_set_results | utf8 | |
10 |
| character_set_server | utf8 | |
11 |
| character_set_system | utf8 | |
12 |
| character_sets_dir | /usr/share/mysql/charsets/ | |
13 |
+ --------------------------+----------------------------+ |
但是根據以上的配置過了后,mysql就無法啟動了,這是為什么呢?往下看:
在5.1版本時,為了解決中文亂碼問題設置默認字符集為utf8時,在my.ini內的 [mysql] 和 [mysqld] 項中都是寫:
1 |
default-character- set =utf8 |
到了5.5版本, [mysql] 項內可以這么寫, [mysqld] 項內這么寫在啟動MySQL服務時會有1067錯誤,經查詢發現這里必須要這樣寫:
1 |
character- set -server=utf8 |
目前已知5.1和5.5有這么一個不同之處,且是從5.5的安裝版本自動生成的my.ini文件中看出的。配置免安裝的5.5版本還需要進一步的實驗。