日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql不能改编码_(转)MySQL设置和修改编码问题

發(fā)布時(shí)間:2023/12/2 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql不能改编码_(转)MySQL设置和修改编码问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql版本:5.7.18

一、常用查看字符集設(shè)定命令

1、查看數(shù)據(jù)庫(kù)支持的所有字符集。

show character set;

(或 show char set;)

2、查看當(dāng)前狀態(tài)命令(顯示結(jié)果會(huì)包含數(shù)據(jù)庫(kù)的字符集設(shè)置)

status(或 /s)

其中Db characterset對(duì)應(yīng)的是數(shù)據(jù)庫(kù)目錄下的db.opt文件內(nèi)容。(查到mysql安裝目錄下有4個(gè)db.opt文件,與顯示相同的在mysql/data/mysql路徑下)。

3、查看系統(tǒng)字符集設(shè)置(包括所有的字符集設(shè)置)

show variables like '%char%';

其中的含義如下:

條目說(shuō)明

character_set_client

為客戶端使用的字符集。

character_set_connection

為連接數(shù)據(jù)庫(kù)的字符集設(shè)置類型,如果程序沒(méi)有指明連接數(shù)據(jù)庫(kù)使用的字符集類型則按照服務(wù)器端默認(rèn)的字符集設(shè)置。

character_set_database

為數(shù)據(jù)庫(kù)服務(wù)器中某個(gè)庫(kù)使用的字符集設(shè)定,如果建庫(kù)時(shí)沒(méi)有指明,將使用服務(wù)器安裝時(shí)指定的字符集設(shè)置。

character_set_results

為數(shù)據(jù)庫(kù)給客戶端返回時(shí)使用的字符集設(shè)定,如果沒(méi)有指明,使用服務(wù)器默認(rèn)的字符集。

character_set_server

為服務(wù)器安裝時(shí)指定的默認(rèn)字符集設(shè)定。

character_set_system

為數(shù)據(jù)庫(kù)系統(tǒng)使用的字符集設(shè)定。

當(dāng)客戶端連接服務(wù)器的時(shí)候,它會(huì)將自己想要的字符集名稱發(fā)送給mysql服務(wù)器,然后服務(wù)器就會(huì)使用這個(gè)字符集去設(shè)置 character_set_connection、character_set_client、character_set_results這三個(gè)值。

在cmd客戶端使用GBK字符集,上圖client、connection、results的值為GBK。

在Navicat for Mysql中運(yùn)行命令,顯示值為utf-8。

4、查看具體的數(shù)據(jù)庫(kù)表的字符集設(shè)置

show full columns from tablename;

(或show create table tablename\G;

注:\G在cmd中可以去除打印的表格邊框,在Navicat for Mysql中命令有\(zhòng)G會(huì)報(bào)錯(cuò)。)

5、查看數(shù)據(jù)庫(kù)編碼

show create database dbname;

二、創(chuàng)建時(shí)指定字符集

知道了怎么查找字符集的相關(guān)信息之后,我們就要懂得怎么在創(chuàng)建指定對(duì)象的時(shí)候,為該對(duì)象匹配相應(yīng)的字符集。

1、服務(wù)器級(jí)

在安裝MySQL時(shí),可以設(shè)置服務(wù)器的默認(rèn)編碼格式,也可對(duì) my.ini做修改,修改[mysqld]里面的character_set_server=utf8,則可設(shè)置character_set_server的值。

2、數(shù)據(jù)庫(kù)級(jí)

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

注:如果不指定默認(rèn)的字符集,則系統(tǒng)會(huì)根據(jù)character_set_database的值進(jìn)行設(shè)置。

3、表級(jí)

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

在創(chuàng)建表時(shí)指定了默認(rèn)字符集為utf8,即使character_set_database為gbk,表的列都為utf-8。

但要注意,如果沒(méi)有定義表的默認(rèn)字符集,則會(huì)按照character_set_database的值來(lái)設(shè)置。(試了一下應(yīng)該是按照表所屬的數(shù)據(jù)庫(kù)字符集來(lái)設(shè)置吧)。

4、列級(jí)

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

三、修改字符集命令

MySQL的字符集問(wèn)題主要是兩個(gè)概念,一個(gè)是Character Sets,一個(gè)是Collations,前者是字符內(nèi)容

及編碼,后者是對(duì)前者進(jìn)行比較操作的一些規(guī)則。這兩個(gè)參數(shù)集可以在數(shù)據(jù)庫(kù)實(shí)例、單個(gè)數(shù)據(jù)庫(kù)、表、列等四個(gè)級(jí)

別指定。

1、修改character_set_connection、character_set_client、character_set_results三值

SET NAMES charset_name [COLLATE 'collation_name']

(例:SET NAMES utf8;)

該命令相當(dāng)于

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

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

2、修改character_set_database字段

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

(例:alter database test_database character set latin2;)

3、修改character_set_server字段

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

4、修改表的字符集

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

(例:ALTER table hahaha CHARACTER set gbk)

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;)

四、附 Linux下MySQL字符集設(shè)置

MySQL的字符集問(wèn)題主要是兩個(gè)概念,一個(gè)是Character Sets,一個(gè)是Collations,前者是字符內(nèi)容及編碼,后者是對(duì)前者進(jìn)行比較操作的一些規(guī)則。這兩個(gè)參數(shù)集可以在數(shù)據(jù)庫(kù)實(shí)例、單個(gè)數(shù)據(jù)庫(kù)、表、列等四個(gè)級(jí)別指定。

對(duì)于使用者來(lái)說(shuō),一般推薦使用utf8編碼來(lái)存儲(chǔ)數(shù)據(jù)。而要解決亂碼問(wèn)題,不單單是MySQL數(shù)據(jù)的存儲(chǔ)問(wèn)題,還和用戶的程序文件的編碼方式、用戶程序和MySQL數(shù)據(jù)庫(kù)的連接方式都有關(guān)系。

首先,MySQL有默認(rèn)的字符集,這個(gè)是安裝的時(shí)候確定的,在編譯MySQL的時(shí)候可以通過(guò)DEFAULT_CHARSET=utf8和DEFAULT_COLLATION=utf8_general_ci這兩個(gè)參數(shù)(MySQL5.5版本,5.1版本用–with-charset=utf8 –with-collation=utf8_general_ci)來(lái)指定默認(rèn)的字符集為utf8,這也是最一勞永逸的辦法,這樣指定后,客戶端連接到數(shù)據(jù)庫(kù)的編碼方式也默認(rèn)是utf8了,應(yīng)用程序不需要任何處理。

但是遺憾的是,很多人編譯安裝MySQL的時(shí)候沒(méi)有指定這兩個(gè)參數(shù),大多數(shù)人更是通過(guò)二進(jìn)制程序的方式安裝,那么這時(shí)候MySQL的默認(rèn)字符集是latin1。而這時(shí)候我們?nèi)匀豢梢灾付∕ySQL的默認(rèn)字符集,通過(guò)my.cnf文件增加兩個(gè)參數(shù):

在[mysqld]下添加default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8);

在[client]下添加default-character-set=utf8。

這樣我們建數(shù)據(jù)庫(kù)建表的時(shí)候就不用特別指定utf8的字符集了。配置文件里的這種寫法解決了數(shù)據(jù)存儲(chǔ)和比較的問(wèn)題,但是對(duì)客戶端的連接是沒(méi)有作用的,客戶端這時(shí)候一般需要指定utf8方式連接才能避免亂碼。也就是傳說(shuō)總的set names命令。事實(shí)上,set names utf8命令對(duì)應(yīng)的是服務(wù)器端以下幾個(gè)命令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

但這三個(gè)參數(shù)是不能寫在配置文件my.cnf里的。只能通過(guò)set命令來(lái)動(dòng)態(tài)修改。我們需要的是在配置文件里寫好一勞永逸的辦法。那么這時(shí)候,是否有在服務(wù)端解決問(wèn)題的辦法呢,可行的思路是在init_connect里設(shè)置。這個(gè)命令在每個(gè)普通用戶連接上來(lái)的時(shí)候都會(huì)觸發(fā)執(zhí)行,可以在[mysqld]部分增加以下一行設(shè)置連接字符集:

在[mysqld]下添加:

init_connect = 'SET NAMES utf8'

總結(jié):

1、首選在編譯安裝MySQL的時(shí)候指定兩個(gè)參數(shù)使用utf8編碼。

2、次選在配置文件my.cnf或my.ini設(shè)定兩個(gè)參數(shù),同時(shí)設(shè)置init_connect參數(shù)。

3、第三在配置文件my.cnf或my.ini設(shè)定兩個(gè)參數(shù),同時(shí)客戶端的連接指定set names命令。

4、在配置文件my.cnf里的client和server處加入default-character-set參數(shù)方便管理。

總結(jié)

以上是生活随笔為你收集整理的mysql不能改编码_(转)MySQL设置和修改编码问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。