MySQL的字元編碼體系(一) 資料儲存編碼

2021-12-30 00:12:10 字數 1310 閱讀 1095

安裝mysql好多次了,每次都會糾結於資料庫的字元編碼配置,所以我決定這一次徹底把它理清。

資料儲存的字元編碼配置是指定資料庫中儲存的資料預設採用什麼字元編碼。預設字元編碼的設定分為四個層次:伺服器級、資料庫級、資料表級和列級。也就是說,可以為伺服器設定乙個預設字元編碼,再為伺服器中的每乙個資料庫設定不同的預設編碼,再為同乙個資料庫中的每乙個資料表設定不同的預設編碼,再為同乙個資料表中的每乙個列設定不同的預設編碼。

mysql資料庫伺服器的邏輯結構

那這四個層次的編碼設定到底如何起作用呢?如果新建資料庫時沒有指定字元編碼,就預設設定為伺服器的編碼;如果新建資料表時沒有指定任何編碼,就預設設定為資料庫的編碼;如果向資料表新增新列或新建資料表時沒有特別指定某些列的編碼,那麼這些列就預設設定為資料表的編碼。注意這裡四個層次的編碼都是作為「預設」的存在,使用者建立資料庫、表或增加列時直接指定的編碼是最優先的。

另一方面,直接改變這四個層次的編碼並不會改變它們各自所有下層物件的當前編碼。比如修改只server級,那麼所有已經存在的資料庫的預設編碼不變,資料表、表列以及每一行現有資料記錄的字元編碼都不變,但是如果新建乙個資料庫且不指定其預設編碼,那它的預設編碼就會被設定為server的預設編碼;同樣即使修改了所有四個層次的編碼,但是資料表中每一條現有記錄的字元字段仍然是按原來的編碼儲存的,但是如果向資料表中新插入一條記錄,資料庫將根據資料表當前各列的預設編碼來儲存該條記錄的各個字元字段。

修改server以下各級編碼的sql語句如下:

alter [db_name] [default] character set [=] charset_name

alter table dbl_name [default] character set [=] charset_name

alter table dbl_name modify [column] col_name character set charset_name

注意上面第三條修改列字元編碼,實際上是通過完全重新定義列屬性的方式實現的,語法跟建立新資料表時指定列欄位屬性一樣的。所以如果這裡只是想修改列字元編碼,那就必須完整地寫上建立該列時使用的所有定義修飾。

修改server預設編碼可以通過執行時直接修改變數character_set_server實現,但這樣是臨時性的,客戶端關閉重啟後又會自動恢復。要想永久改變server預設編碼需要在my.ini或my.cnf配置檔案的「[mysqld]」區域中設定該變數的值,然後重啟伺服器:

[mysqld]

character_set_server=charset_name

MySQL的字元編碼體系(一) 資料儲存編碼

安裝mysql好多次了,每次都會糾結於資料庫的字元編碼配置,所以我決定這一次徹底把它理清。資料儲存的字元編碼配置是指定資料庫中儲存的資料預設採用什麼字元編碼。預設字元編碼的設定分為四個層次 伺服器級 資料庫級 資料表級和列級。也就是說,可以為伺服器設定乙個預設字元編碼,再為伺服器中的每乙個資料庫設定...

MySQL 中級教程 一 資料庫 表以及字段編碼

在資料庫的操作中總是會涉及到字串的寫入,如果我們寫的字元都是英文本元,很ok,沒有問題。但如果我們運算元據庫的時候要寫入一些中文字串,因為資料庫對於中文字元的編碼是後來相容的,而且我們在建立資料庫的時候,系統預設給定的編碼方式是latin1,這種編碼方式是不相容中文字元的,寫入中文字元以後顯示出來的...

mysql 字符集編碼 mysql的字元編碼

可以通過show variables like character 來輸出當前字元編碼情況 可得到如下結果 mysql show variables like character variable name value character set client gbk 注 客戶端編碼 想從win下的...