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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

mysql版本:5.7.18

一、常用查看字符集設定命令

1、查看數據庫支持的所有字符集。

show character set;

(或 show char set;)

2、查看當前狀態命令(顯示結果會包含數據庫的字符集設置)

status(或 /s)

其中Db characterset對應的是數據庫目錄下的db.opt文件內容。(查到mysql安裝目錄下有4個db.opt文件,與顯示相同的在mysql/data/mysql路徑下)。

3、查看系統字符集設置(包括所有的字符集設置)

show variables like '%char%';

其中的含義如下:

條目說明

character_set_client

為客戶端使用的字符集。

character_set_connection

為連接數據庫的字符集設置類型,如果程序沒有指明連接數據庫使用的字符集類型則按照服務器端默認的字符集設置。

character_set_database

為數據庫服務器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用服務器安裝時指定的字符集設置。

character_set_results

為數據庫給客戶端返回時使用的字符集設定,如果沒有指明,使用服務器默認的字符集。

character_set_server

為服務器安裝時指定的默認字符集設定。

character_set_system

為數據庫系統使用的字符集設定。

當客戶端連接服務器的時候,它會將自己想要的字符集名稱發送給mysql服務器,然后服務器就會使用這個字符集去設置 character_set_connection、character_set_client、character_set_results這三個值。

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

在Navicat for Mysql中運行命令,顯示值為utf-8。

4、查看具體的數據庫表的字符集設置

show full columns from tablename;

(或show create table tablename\G;

注:\G在cmd中可以去除打印的表格邊框,在Navicat for Mysql中命令有\G會報錯。)

5、查看數據庫編碼

show create database dbname;

二、創建時指定字符集

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

1、服務器級

在安裝MySQL時,可以設置服務器的默認編碼格式,也可對 my.ini做修改,修改[mysqld]里面的character_set_server=utf8,則可設置character_set_server的值。

2、數據庫級

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

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

3、表級

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

在創建表時指定了默認字符集為utf8,即使character_set_database為gbk,表的列都為utf-8。

但要注意,如果沒有定義表的默認字符集,則會按照character_set_database的值來設置。(試了一下應該是按照表所屬的數據庫字符集來設置吧)。

4、列級

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

三、修改字符集命令

MySQL的字符集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字符內容

及編碼,后者是對前者進行比較操作的一些規則。這兩個參數集可以在數據庫實例、單個數據庫、表、列等四個級

別指定。

1、修改character_set_connection、character_set_client、character_set_results三值

SET NAMES charset_name [COLLATE 'collation_name']

(例:SET NAMES utf8;)

該命令相當于

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

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

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字段

最簡單的方法是直接改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字符集設置

MySQL的字符集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字符內容及編碼,后者是對前者進行比較操作的一些規則。這兩個參數集可以在數據庫實例、單個數據庫、表、列等四個級別指定。

對于使用者來說,一般推薦使用utf8編碼來存儲數據。而要解決亂碼問題,不單單是MySQL數據的存儲問題,還和用戶的程序文件的編碼方式、用戶程序和MySQL數據庫的連接方式都有關系。

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

但是遺憾的是,很多人編譯安裝MySQL的時候沒有指定這兩個參數,大多數人更是通過二進制程序的方式安裝,那么這時候MySQL的默認字符集是latin1。而這時候我們仍然可以指定MySQL的默認字符集,通過my.cnf文件增加兩個參數:

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

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

這樣我們建數據庫建表的時候就不用特別指定utf8的字符集了。配置文件里的這種寫法解決了數據存儲和比較的問題,但是對客戶端的連接是沒有作用的,客戶端這時候一般需要指定utf8方式連接才能避免亂碼。也就是傳說總的set names命令。事實上,set names utf8命令對應的是服務器端以下幾個命令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

但這三個參數是不能寫在配置文件my.cnf里的。只能通過set命令來動態修改。我們需要的是在配置文件里寫好一勞永逸的辦法。那么這時候,是否有在服務端解決問題的辦法呢,可行的思路是在init_connect里設置。這個命令在每個普通用戶連接上來的時候都會觸發執行,可以在[mysqld]部分增加以下一行設置連接字符集:

在[mysqld]下添加:

init_connect = 'SET NAMES utf8'

總結:

1、首選在編譯安裝MySQL的時候指定兩個參數使用utf8編碼。

2、次選在配置文件my.cnf或my.ini設定兩個參數,同時設置init_connect參數。

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。