mysql中的編碼問題 mysql編碼問題總結

2021-10-18 01:48:00 字數 2514 閱讀 9083

網上查了一些mysql編碼相關的資料,在這裡整理下,不對的地方歡迎各位批評指正。

- character_set_server:預設的內部操作字符集

– character_set_connection:連線層字符集

– character_set_results:查詢結果字符集

– character_set_database:當前選中資料庫的預設字符集

– character_set_system:系統元資料(欄位名等)字符集

– 還有以collation_開頭的同上面對應的變數,用來描述字元序。

2. mysql提供了不同粒度的字符集控制:

控制粒度

檢視字符集

連線(connection)

character_set_connection

字段(field)

show full fields from tablename

表(table)

show create table tablename

資料庫(database)

character_set_database 或 show create database databasename

mysql伺服器(server)

character_set_server

在建立資料庫、表、欄位的時候,各個粒度上的字符集都是可以指定的,也可以不指定,這樣的話就使用上一級預設的字符集。

下面分別看看建立資料庫、表、欄位時對字符集的控制。

3.1 建立資料庫

(1)檢視當前系統server字符集是latin1

(2)建立資料庫(不指定編碼)

可以看到新建立的資料庫的字符集和server的字符集相同

(3)指定資料庫字符集

新建立的資料庫字符集和server字符集並不相同,而是使用了自己的字符集utf8

(4)修改server的字符集為utf8

(5)再次使用預設字符集建立資料庫

新的資料庫使用了和server相同的編碼

3.2 建立表

(1)當前字符集設定

資料庫編碼為latin1

(2) 建立表

name欄位指定了字符集為uft8, address欄位採用預設設定

(3) 插入中文測試

可以看到,採用name欄位正常顯示,address欄位出現了亂碼

4. 實踐建議

實踐當中,建議建立資料庫的時候就指定好db的字符集,如下:

create database testdb default charset utf8

之後建立表、欄位的時候可以不指定字符集,預設整合db的字符集設定。

當然db建立好之後也可以修改db的編碼:

alter database testdb default character set utf8 collate utf8_bin

修改表的編碼:alter table test default character set utf8 collate utf8_bin

修改欄位的編碼:  alter table test change address address varchar( 45 ) character set utf8 collate utf8_bin not null

修改了address欄位的編碼,原先的資料仍然不能正常顯示,因為之前插入資料的時候,客戶端傳入的是utf8格式,存在latin1無法編碼的字元,資料在

程序字符集轉換的時候出現了損壞,查詢的時候已經無法得到完整的插入時的資料了

但是新插入的中文資料可以正常顯示

參考:

linux 中mysql 的編碼問題

linux 中的mysql 編碼問題解決如下 找到其配置檔案,在ubuntu中的路徑為 etc mysql my.cnf 此時需要更改其讀寫許可權 chown 你當前的使用者名稱 etc mysql my.cnf 我這裡就是 chown huicer etc mysql my.cnf 加入以下就可以...

mysql中的編碼 mysql中的編碼

一 mysql中的編碼 mysql show variables like collation mysql show variables like character set 預設是latin1編碼,會導致中文亂碼。修改庫的編碼 mysql alter database db name charac...

MYSQL中關於編碼問題

我們需要使用mysql語句 show variables like char 可查詢到當前的內容 character set client utf8 mysql把我們客戶端傳遞的資料都當成是utf8 也是給它傳遞utf8,如果我們傳遞的是gbk,那麼需要修改這個變數為gbk character se...