sql server修改字段編碼格式_關于MySQL如何修改character_set_client的編碼問題

問題引入:

    我們經常會遇到一些向MySQL數據庫中插入中文,但是select出來的時候,卻發現是亂碼的情況。如我們向表a出入這樣一段記錄:i

insert into a values(‘你好helloworld你好’,’helloworld’);
可能當你訪問它的時候,會發現他的結果變成如下圖所示:

FFzuMb.png image

那怎么樣才能解決這種問題呢?通過下文對MySQL中字符集的一些操作,你將會得到答案!

**查看庫、表字符集命令: **

    要解決字符集的問題,首先要知道現在的系統、數據庫、表、客戶端等使用什么樣的字符集,以及系統支持什么字符集等,下面介紹一些獲取相關信息的語句:

1.查看數據庫支持的所有字符集
show character set;或者show char set;

ZNBnAz.png Image(42)

2.查看當前狀態,里面當然包括字符集的設置:

status或者/s

rAJzYj.png Image(43)

其中Db characterset對應的是數據庫目錄下的文件內容:

iiumua.png Image(44)

3.查看系統字符集設置,包括所有的字符集設置:

show variables like ‘%char%’;

得出如何所示結果:

aeQZVj.png Image(40)

其中的含義如下:

bIf2Mz.png Image(41)

關于connection相關的字符集的官方文檔:

What character set is the statement in when it leaves the client?

The server takes the character_set_client system variable to be the character set in which statements are sent by the client.

What character set should the server translate a statement to after receiving it?

For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.

What character set should the server translate to before shipping result sets or error messages back to the client?

The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names and error messages.
從上文中可以看出character_set_connection、character_set_client、character_set_results三個字符集什么時候用到。從實際上可以看到,當客戶端連接服務器的時候,它會將自己想要的字符集名稱發給mysql服務器,然后服務器就會使用這個字符集去設置character_set_connection、character_set_client、character_set_results這三個值。如cmd是用gbk,而mysql workbench是用utf8.
CMD:

VrINfi.png image

MySql WorkBench:

MrIrQz.png image

4.查看數據表中字符集設置:
show full columns from tablename;

Bb6BBf.png Image(45)

show create table tablename/G;

QvInUb.png Image(46)

5.查看數據庫編碼:
show create database dbname;

6vyUby.png Image(47)

創建時指定字符集:

    知道了怎么查找字符集的相關信息之后,我們就要懂得怎么在創建指定對象的時候,為該對象匹配相應的字符集。

1.服務器級:
在安裝MySQL時可以設置服務器的默認編碼格式,也可對做修改,修改[mysqld]里面的character_set_server=utf8,則可設置character_set_server的值。2.數據庫級:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

r2uAna.png Image(48)

注意,如果不指定默認的字符集,則系統會根據character_set_database的值進行設置,如:

naAvIn.png Image(49)

3.表級:

CREATE TABLEdb_name.tb_name (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

從下圖可看出,定義表的默認字符集為utf8,即使character_set_database為gbk,但是表的列都未utf8

2UNfUj.png Image(50)

但要注意,如果沒有定義表的默認字符集,則他會按照character_set_database的值來設置,如圖所示:

AvUJVf.png Image(51)

4.列級:

CREATE TABLEdb_name.tb_name ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );

從下圖可以看到,整個表的默認字符集為gbk,所以沒有指定字符集的列都用默認的字符集,而指定了字符集的列name,則使用指定的字符集utf8。

7BZ7Vr.png Image(52)

修改字符集命令

    如果已經是創建好的對象,那又應該如何處理呢。我們就應該對指定對象就行修改字符集的操作。

1.修改character_set_connection、character_set_client、character_set_results三值:
對于某一個連接來說,可以使用:
SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]

6rAFFn.png image

命令

SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]

相當于

SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;

另外、還可以修改配置文件,對[mysql]下增加default-character-set=utf8,配置成你想要的字符集。(個人嘗試在里面配置過,沒有成效,不知道是不是被使用的客戶端想要的字符集給覆蓋掉了呢?)

2.修改character_set_database字段:

ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

zaiyuq.png image

3.修改character_set_server字段:

最簡單的方法是直接改配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重啟mysqld,則可改為你想要的字符集。

4.修改表的字符集:

ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]

5.修改列的字符集:

col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:

ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;

轉自:

參考資料:

MySQL的Character Set Support: http://dev.mysql.com/doc/refman/5.6/en/charset.html
mysql常用查看庫,表字符集命令: http://bjlfp.blog.163.com/blog/static/773684612012298455765/
MySQL 插入數據時,中文亂碼問題的解決:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通用apdu指令_8086微處理器中的通用指令格式

通用apdu指令Introduction: 介紹: In this article, we are going to discuss about the 6 general formats of instructions. 在本文中,我們將討論6種通用指令格式。 One byte instruction: 一字節指令 : This is only one byte long an…

Linux中斷不能進行任務調度,關中斷是否禁止任務調度?關中斷能作為互斥嗎?...

今天再看《嵌入式軟件系統教程》((美)西蒙 著,陳向群 等譯) ,里面講到關中斷會關了任務調度,作者沒說原因,我也不知道為什么,所以查了查網絡。在這個網址http://www.hqwic.com/bbs/topic.aspx?topicid11253上有一個討…

Win10系統怎樣讓打開圖片方式為照片查看器

打開注冊表編輯器之后,我們雙擊左側的目錄,依次打開HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft目錄,如下圖所示。 在Microsoft目錄下,我們需要找到Windows Photo Viewer\Capabilities\FileAssociations目錄項,直到看到該子…

python爬蟲開發 從入門到實戰 pdf 謝乾坤_python字符串和整數相互轉換的實例分享...

python 字符串和整數的轉換方法數字轉成字符串方法一:使用格式化字符串:tt322tem%d %tttem即為tt轉換成的字符串常用的格式化字符串:%d 整數%f%F 浮點數%e%E 科學計數%g%G e 和%f/%E 和%F 的簡寫%% 輸出%格式化操作符輔助指令符號 作用* 定義寬度或者小數…

c語言插入排序算法_插入排序算法,流程圖和C,C ++代碼

c語言插入排序算法In the last article, we discussed about the bubble sort with algorithm, flowchart and code. In this article, we are going to discuss about another basic sorting technique i.e. insertion sort. 在上一篇文章中,我們討論了用算法&…

EF使用CodeFirst方式生成數據庫技巧經驗

前言 EF已經發布很久了,也有越來越多的人在使用EF。如果你已經能夠非常熟練的使用EF的功能,那么就不需要看了。本文意在將自己使用EF的方式記錄下來備忘,也是為了給剛剛入門的同學一些指導。看完此文,你應該就學會以CodeFirst的方…

java jar包示例_Java包getImplementationVersion()方法和示例

java jar包示例包類的getImplementationVersion()方法 (Package Class getImplementationVersion() method) getImplementationVersion() method is available in java.lang package. getImplementationVersion()方法在java.lang包中可用。 getImplementationVersion() method …

c語言中字母的定義,c語言字符串定義與初始化 - 且聽風吟

字符串的兩種定義方式char數組char sa[] “hello world”;char指針char *sp “hello world”;這兩種方式都產生了一個”hello world”的字符串常量,字符串常量存儲在靜態存儲區中,靜態存儲區中的內容在程序運行的整個過程中都存在,而且只存儲一份。數組…

python計算兩字符串中的位置_python – 計算兩個字符串之間距離的算法

是否有任何字符串距離算法沒有考慮到單詞的順序?以下算法未提供所需結果(在該示例中,所需結果應為1):import jarojaro.jaro_winkler_metric(uMichael Jordan,uJordan Michael)>>>0.47import LevenshteinLevenshtein.ratio(Michael Jordan,Jorda…

php unset函數_PHP | 使用unset()函數從數組中刪除元素

php unset函數Given an array and we have to remove an element from the array. 給定一個數組,我們必須從數組中刪除一個元素。 unset()函數 (unset() function) To remove an element from an array, we can use a PHP library unset() function, it accepts th…

vi顯示行號

vi顯示行號 :set nu 帶行號查看,并不改變文件內容:set nonu 取消帶行號查看在每個用戶的主目錄下,都有一個 vi 的配置文件".vimrc"或".exrc"用戶可以編輯它,使這些設置在每次啟動 vi 時,都有效.例如,加入如下設置行:set nu 顯示行號…

對象過濾某個屬性 循環 php_37道PHP面試題(附答案)

1、什么事面向對象?主要特征是什么?面向對象是程序的一種設計方式,它利于提高程序的重用性,使程序結構更加清晰。主要特征:封裝、繼承、多態。2、SESSION 與 COOKIE的區別是什么,請從協議,產生的…

項響琴C語言書籍在線瀏覽,電子琴 c語言程序

實用#include unsigned char code table[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab[]{64021,64103,64260,…

Java File類boolean createNewFile()方法(帶示例)

文件類布爾型createNewFile() (File Class boolean createNewFile()) This method is available in package java.io.File.createNewFile(). 軟件包java.io.File.createNewFile()中提供了此方法。 This method is used to create a new file by using createNewFile() method a…

oracle ? SQL執行過程

1.sql執行過程1>解析(判斷對象是否存在,是否有權限查詢,語義解析,檢查緩存中是否有相同的SQL等等)2>優化(CBO確定優化模式,確定訪問路徑,聯接順序,過程中通過很多綜…

vue-video-player修改src就會報錯_4、修改入口點代碼

在riscv上電時,會進行CPU自檢,然后跳轉到bootloader處執行。bootloader設置好kernel的運行環境后,從硬盤加載kernel到內存,最后再跳轉到kernel入口地址。我們采用的bootloader為OpenSBI,被加載到0x80000000地址&#x…

數碼管超聲波c語言黑51,51單片機開發板-超聲波測距-數碼管顯示

《51單片機開發板-超聲波測距-數碼管顯示》由會員分享,可在線閱讀,更多相關《51單片機開發板-超聲波測距-數碼管顯示(16頁珍藏版)》請在人人文庫網上搜索。1、計算機技術系項目工作報告課程名稱單片機開發板設計與制作實訓班級學號姓名項目名稱超聲波測距…

java 方法 示例_Java ArrayDeque帶有示例的removeFirstOccurrence()方法

java 方法 示例ArrayDeque類removeFirstOccurrence()方法 (ArrayDeque Class removeFirstOccurrence() method) removeFirstOccurrence() method is available in java.lang package. removeFirstOccurrence()方法在java.lang包中可用。 removeFirstOccurrence() method is use…

社交應用動態九宮格圖片的規則

這里主要以微信和QQ空間為作為研究對象,得到的結論如下。 QQ空間里的動態 iOS設備,以iPhone6為分界 iPhone6及以上分辨率的設備: 當寬且高同時 > 512px時,判斷 寬/高的比例值:大于 2時,以高度為基準&…

c語言實現鏈表結構6,用c語言實現的鏈表結構--數據結構實驗

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include"stdio.h"//使用new指針來將臨時變量重新初始化#include"stdio.h"typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;void InitList(LinkList &L)//…