MySQL關於編碼設定及引發亂碼的問題

2021-05-23 07:47:56 字數 4676 閱讀 7985

昨天嘗試把自己用php編寫的第乙個糙站發布到網上..結果出現了因為編碼不統一而導致亂碼的想象..在"冷雨"童鞋的"控制下"終於把出現亂碼的問題解決了...

總結下因為資料庫檔案的寫入和讀出出現亂碼的情況:

一. 在前台連線寫入的時候編碼是不是與資料庫編碼符合

<?php

$conn = @ mysql_connect("localhost","root","")or die ("資料庫連線錯誤");

mysql_select_db("millia",$conn);

mysql_query('set names utf8');//使用utf8而不是utf-8中文編碼

二、檢視mysql資料庫的編碼

mysql> show variables like 'character_set_%';

| variable_name | value |

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1 |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

7 rows in set (0.00 sec)

mysql> show variables like 'collation_%';

| variable_name | value |

| collation_connection | latin1_swedish_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

3 rows in set (0.00 sec)

預設就是瑞典latin1,一下是換成我們自己的編碼,如utf8:外部訪問資料亂碼的問題就出在這個connection連線層上,解決方法是在傳送查詢前執行一下下面這句:

set names 'utf8';

它相當於下面的三句指令:

set character_set_client = utf8;

set character_set_results = utf8;

set character_set_connection = utf8;

一般只有在訪問之前執行這個**就解決問題了,下面是建立資料庫和資料表的,設定為我們自己的編碼格式。

建立資料庫時編碼設定

mysql> create database name characterset utf8;

建立表時編碼設定

create table `type` (`id` int(10) unsigned not null auto_increment,`flag_deleted` enum('y','n') character set utf8 not null default 'n',`flag_type` int(5) not null default '0',`type_name` varchar(50) character set utf8 not null default '',primary key (`id`))default charset=utf8;

修改資料庫成utf8.

mysql> alter database name character set utf8;

修改表預設用utf8.

mysql> alter table type character set utf8;

修改欄位用utf8

mysql> alter table type modify type_name varchar(50) character set utf8;

附:mysql編碼設定步驟

一、編輯mysql的配置檔案

mysql的配置檔案windows下一般在系統目錄下或者在mysql的安裝目錄下名字叫my.ini,可以搜尋,linux下一般是 /etc/my.cnf

--在 [mysql]  標籤下加上一行

default-character-set = utf8

--在 [mysqld] 標籤下加上三行

default-character-set = utf8

character-set-server = utf8

collation-server = utf8_general_ci

init_connect = 'set collation_connection = utf8_general_ci'

init_connect = 'set names utf8'

lower_case_table_names = 1        //表名不區分大小寫(此與編碼無關)

--在 [mysql.server]標籤下加上一行

default-character-set = utf8

--在 [mysqld_safe]標籤下加上一行

default-character-set = utf8

--在 [client]標籤下加上一行

default-character-set = utf8

二、重新啟動mysql服務

windows可在服務管理器中操作,也可使用命令列:

net stop mysql 回車

net start mysql 回車

服務名可能不一定為mysql,請按自己的設定

linux下面可是用 service mysql restart

如果出現啟動失敗,請檢查配置檔案有沒有設定錯誤

三、檢視設定結果

登入mysql命令列客戶端:開啟命令列

mysql –uroot –p 回車

輸入密碼

進入mysql後 執行 :show variables like "%char%";

顯示結果應該類似如下:

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

如果仍有編碼不是utf8的,請檢查配置檔案,也可使用mysql命令設定:

set character_set_client = utf8;

set character_set_server = utf8;

set character_set_connection = utf8;

set character_set_database = utf8;

set character_set_results = utf8;

set collation_connection = utf8_general_ci;

set collation_database = utf8_general_ci;

set collation_server = utf8_general_ci;

以上命令有部分只對當前登入有效,所以不是很管用。

四、建庫匯入資料

匯入sql指令碼檔案前,先確保該指令碼檔案及內容格式為utf-8編碼格式,

同以上方法登入mysql命令列,use 庫名  進入相應資料庫

set names utf8;

source sql指令碼檔名;

五、程式連線字串(此項與mysql設定無關,為程式開發使用)

對於較老的jdbc版本的驅動,連線字元創可使用一下相似格式:

jdbc:mysql://127.0.1:3306/test?useunicode=true&characterencoding=utf-8

六、附錄

如果無法更改資料庫配置檔案,可以採取一下方法(不保證全部有效):

1、建資料庫時設定資料庫編碼為utf-8

例如   create database `test` default character set utf8;

2、匯入資料庫sql的時候,請確保sql檔案為utf-8編碼

進入mysql命令列後輸入    set names utf8;

再進入資料庫        use test;

在匯入sql指令碼        source test.sql;

jdbc:mysql://127.0.1:3306/test?useunicode=true&characterencoding=utf-8 

mysql編碼設定

檢視系統的字符集和排序方式的設定 1 mysql status 2 mysql show variables like character set mysql show variables like collation 1.set names utf8 它相當於下面的三句指令 set charact...

MySQL 編碼設定

檢視當前databases的編碼 use databases name status 資料庫表中字段的字符集設定檢視 show create table tables name show full columns from tables name 當前聯接系統引數 show variables li...

Mysql設定編碼

1 按照網上的方式設定mysql編碼 修改 etc mysql my.cnf 在 mysqld 字段下面新增 default character set utf8 新增完之後重啟mysql,發現無法啟動 start job failed to start 改為如下方式 在 mysqld 字段下面新增...