字符集級別及設定
mysql字符集修改方法
我們在開發過程中可能會碰到mysql字符集的問題,有時候發現存入某個字元,資料庫儲存不對。有時候發現,儲存某個字元正確,但是獲取到的又是亂碼。這種情況下乙個乙個去網上搜尋,實在是浪費時間。這裡總結一下mysql中字符集的規則以及配置方法,下次遇到問題時,不妨從這裡總結的入手。
首先,先了解兩個概念。
mysql包含字符集(character)和校對規則(collation)兩個概念。
字符集和校對規則一般是一對多的關係
以其相關的字符集名開始,通常包括乙個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元,即比較是基於字元編碼的值而與language無關)結束。
如常見的utf8mb4字符集,它預設的校對規則utf8mb4_general_ci表示比較字串是對大小寫不敏感。
mysql中字符集在服務端的儲存,有4個級別的控制,分別為:伺服器級別、資料庫級別、表級別、列級別。
另外要想正確獲取,還要注意客戶端與伺服器互動層次上的字符集配置。
這裡來逐一看一下如何配置以及配置如何生效的吧!
show variables like
'character_set_server'
;
在mysql配置檔案中修改,如my.cnf中:
[mysqld]
character-set-server=utf8mb4
在啟動選項中指定
mysqld --character-set-server=utf8mb4
編譯時指定
cmake . -ddefault_charset=utf8mb4
show variables like
'character_set_database'
;show variables like
'collation_database'
;
如果指定了字符集和校對規則,則使用指定的字符集和校對規則
如果指定了字符集,沒有指定校對規則,則使用指定字符集的預設校對規則
如果指定了校對規則,但未指定字符集,則字符集使用與該校對規則關聯的字符集
如果沒有指定字符集和校對規則,則使用伺服器字符集和校對規則作為資料庫的字符集和校對規則
show
create
table t1;
如果指定了字符集和校對規則,使用指定的字符集和校對規則
如果指定了字符集,沒有指定校對規則,則使用指定字符集的預設校對規則
如果指定了校對規則,但未指定字符集,則字符集使用與該校對規則關聯的字符集
如果沒有指定字符集和校對規則,則使用資料庫字符集和校對規則作為表的字符集和校對規則
上面四種,確定的是資料儲存的字符集和校對規則。對於實際的應用來說,還存在客戶端和伺服器之間互動的字符集和校對規則的設定。
在連線時配置,且每次連線時都需要配置
使用
set names ***
;
這條命令等價於配置了以下三個引數選項
character_set_client、character_set_connection和character_set_results,
分別代表客戶端、連線和返回結果的字符集
在mysql配置檔案中修改
[mysql]
default
-character
-set
= utf8mb4
請注意,這裡的級別控制可能在你的業務程式**中被手動指定了,所以有時候伺服器那邊都儲存正確了,但是拿不到正確的值,就要檢查你的**嘍。
不能通過直接修改資料庫或表字符集來設定,因為舊資料不會被更新
正確的步驟應該如下:
使用mysqldump進行修正
匯出表結構
手工修改表建立sql中標結構定義的字符集為新的字符集
確保記錄不再更新後,匯出所有記錄
開啟資料sql,修改set names ***
使用新的字符集建立新的資料庫
建立表,執行表建立sql
匯入資料,執行資料sql
以下是修改的乙個例子
mysql 字元亂碼 mysql字符集亂碼
很不多不注意資料庫的亂碼情況,導致字元出錯 預設的是拉丁字符集 在這個庫裡面建立的表也是拉丁字符集 下面插入正常的資料 顯示是正常的。當插入中文的時候 必須要把客戶端設定為拉丁字符集。另一種方法是在外面編輯xpg.sql 然後用system倒入進去 mysql不亂碼的5種方法及不亂嗎根源 set n...
mysql怎麼不亂碼了
我在 utf8字符集的表怎麼直接轉utf8mb4 一文中介紹了如何把錶字符集由utf8直接轉換成utf8mb4的幾種方法。1 只修改字符集 使用預設校驗集 yejr imysql.com alter table t1 convert to character set utf8mb4 2 同時修改表字...
mysql字串亂碼 解決Mysql字串亂碼
1 字符集和字元序2 3 字符集 character set 定義了字元以及字元編碼。4 5 字元序 collation 定義了字元的比較規則。6 7 mysql支援多種字符集 與 字元序。8 9 乙個字符集對應至少一種字元序 一般是1對多 10 11 兩個不同的字符集不能有相同的字元序。12 13...