mysql中文資料 MySQL中文資料問題怎麼處理

2021-10-18 20:39:15 字數 1893 閱讀 8670

mysql中文資料問題怎麼處理

閱讀:124

中文資料問題

中文資料問題的本質就是字符集的問題。

由於計算機僅識別二進位制資料,而且人類則更傾向於識別字元(符號),因此就需要乙個二進位制與字元的對應關係,也就是字符集。

在咱們通過 mysql 資料庫的客戶端向雲伺服器插入中文資料的時候,有可能失敗,原因則可能是客戶端和雲伺服器的字符集設定不同導致的,例如:客戶端的字符集為gbk,則乙個中文字元,對應兩個位元組;

雲伺服器的字符集為utf8,則乙個中文字元,對應三個位元組。

這樣顯然會在編碼轉換的過程**現問題,從而導致插入中文資料失敗。

由於所有的資料庫雲伺服器表現的一些特性都是通過雲伺服器端的變數來保持的,因此系統會先讀取自己的變數,看看具體的表現形式。這樣的話,咱們就可以通過以下語句檢視雲伺服器到底識別哪些字符集:-- 檢視雲伺服器識別的全部字符集show character set;

通過以上查詢,咱們會發現:雲伺服器是萬能的,其支援所有字符集。

既然雲伺服器支援這麼多字符集,總會有一種是雲伺服器預設的和客戶端打交道的字符集。因此,咱們可以通過以下語句檢視雲伺服器預設的對外處理的字符集:-- 檢視雲伺服器預設的對外處理的字符集show variables like 'character_set%';

標註2:連線層字符集為utf8;

標註3:當前資料庫的字符集為utf8;

標註4:雲伺服器預設的對外處理的字符集utf8.

通過以上查詢,咱們會發現:雲伺服器預設的對外處理的字符集是utf8.

那麼反過來,咱們在通過客戶端的屬性檢視客戶端支援的字符集:

顯然,咱們已經找到了問題的根源,確實是:客戶端支援的字符集為gbk,而雲伺服器預設的對外處理的字符集為utf8,因此產生矛盾。

既然問題已經找到了,那麼解決方案就是:修改雲伺服器預設接收的字符集為gbk.-- 修改雲伺服器預設接收的字符集為 gbk(不區分大小寫)set character_set_client = gbk;

這樣的話,咱們再插入中文資料的時候,就會插入成功啦!but,在咱們檢視資料的時候,又發現了乙個問題,就是之前咱們插入的中文資料顯示亂碼啦!不過這也正常,因為查詢的時候,資料的**是雲伺服器(utf8),解析資料的是客戶端,而客戶端僅識別gbk格式的資料,顯示亂碼也就在意料之中啦!

因此,解決方案就是:修改雲伺服器給客戶端的資料字符集為gbk.-- 修改雲伺服器給客戶端的資料字符集為 gbk(不區分大小寫)set character_set_results = gbk;

如上圖所示,向雲伺服器插入中文資料的問題已經解決啦!

此外,咱們之前使用的 sql 語句:-- 修改的只是會話級別,即當前客戶端當次連線有效,關閉後失效set 變數 = 值;

這樣的話,每當咱們重啟客戶端的時候,都要依次重新進行設定,比較麻煩,因此咱們可以使用快捷的設定方式,即:set names 字符集;

例如,/**

* 恆等於 set character_set_client = gbk;

* 恆等於 set character_set_results = gbk;

* 恆等於 set character_set_connection = gbk;

*/set names gbk;

表示上述一條語句,將同時改變三個變數的值。其中,connection為連線層,是字符集轉換的中間者,如果其和client和results的字符集一致,則效率更高,不一致也沒有關係。

mysql中中文問題 mysql中中文亂碼的問題

1 在使用mysql時,會出現中文亂碼現象。如下圖 先在cmd中查詢預設的編碼格式 從上圖可以看到在database和sever兩個選項中編碼格式為latin1 上圖也可以看到紅框部分預設的是瑞典latin1,下面是換成我們自己的編碼,如utf8 1.set names utf8 它相當於下面的三句...

mysql中文資料問題

中文資料問題的本質就是字符集的問題。由於計算機僅識別二進位制資料,而且人類則更傾向於識別字元 符號 因此就需要乙個二進位制與字元的對應關係,也就是字符集。在咱們通過 mysql 資料庫的客戶端向伺服器插入中文資料的時候,有可能失敗,原因則可能是客戶端和伺服器的字符集設定不同導致的,例如 客戶端的字符...

mysql 中文資料插入

如何將中文資料插入到mysql資料庫。step1,要保證資料庫支援中文。create database jd1301db default character set utf8 step2,資料庫連線字串 jdbc mysql localhost 3306 jd1301db?useunicode tr...