首先,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文件增加
兩個參數:
1.在[mysqld]下添加
default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)
2.在[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參數方便管理。
更改my.ini文件client、server的字符集
1.service mysqld stop,停用mysql。
2.cp /etc/my.cnf /etc/my.cnf.bak,修改前做備份,這是個好習慣。
修改my.cnf或my.ini(只有修改配置文件,并重啟服務器,才能永久生效)
vi /etc/my.cnf
在[client]下添加,client為控制客戶端的,沒試過,沒有的可以不需要加。
default-character-set=utf8
在[mysqld]下添加,mysqld為控制服務器端的,改過了,OK。
default-character-set=utf8
3.service mysqld restart,重啟。
4.show variables like '%char%';查看。
以下為網絡轉載,比較全。
//////////////////////////////////////////
查看mysql字符集MySQL 亂碼的根源是的 MySQL 字符
ubuntu 10.04 mySql 啟動,停止,重啟
啟動:sudo /etc/init.d/mysql start
停止:sudo /etc/init.d/mysql stop
重啟:sudo /etc/init.d/mysql restart
注意:從windows下拷貝過來的文件在linux下不能直接加入數據庫,因為字符集不一樣,這樣打開即使顯示是中文也不能在數據庫中顯示,要把文件拷貝進linux的另一個文件中轉換字符才可以。
MySQL 亂碼的根源是的 MySQL 字符集設置不當的問題,本文匯總了有關查看 MySQL 字符集的命令。包括查看 MySQL 數據庫服務器字符集、查看 MySQL 數據庫字符集,以及數據表和字段的字符集、當前安裝的 MySQL 所支持的字符集等。
一、查看 MySQL 數據庫服務器和數據庫字符集。
mysql show variables like '%char%';
二、查看 MySQL 數據表(table) 的字符集。
mysql show table status from sqlstudy_db like '%countries%';
三、查看 MySQL 數據列(column)的字符集。
mysql show full columns from countries;
四、查看當前安裝的 MySQL 所支持的字符集。
mysql show charset;
mysql show char set;
以上查看 MySQL 字符集命令,適用于 Windows Linux。
1.查找MySQL的cnf文件的位置
find / -iname '*.cnf' -print
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/texmf/web2c/texmf.cnf
/usr/share/texmf/web2c/mktex.cnf
/usr/share/texmf/web2c/fmtutil.cnf
/usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf
/usr/share/texmf/tex/jadetex/jadefmtutil.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf
2. 拷貝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一個到/etc下,命名為my.cnf
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
3. 修改my.cnf 或my.ini(5.6版本)
vi /etc/my.cnf
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
4.重新啟動MySQL
[root@bogon ~]# /etc/rc.d/init.d/mysql restart
Shutting down MySQL [ 確定 ]
Starting MySQL. [ 確定 ]
[root@bogon ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
其他的一些設置方法:
如 通過配置文件修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
為
default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[root@bogon ~]# /etc/rc.d/init.d/mysql restart
1、建表時指定字符集utf-8:
CREATETABLE?表名
(?`id`TINYINT(255)UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,
`content`VARCHAR(255)NOTNULL)
DEFAULTCHARACTERSET=utf8;
2、修改表的字符集為utf-8:
altertable表名converttocharactersetutf8;
擴展資料:
1、創建數據庫時設置字符集:
CREATEDATABASE?數據庫名CHARACTERSETutf8COLLATEutf8_general_ci;
注意后面三個單詞之間是有下劃線的對于每個選項所給定的值,前面沒有等號;在第一個選項和第二個選項之間也沒有逗號。
2、修改數據庫的字符集:
alterdatabase?數據庫名charactersetutf8;
3、顯示某數據庫字符集設置:
showcreatedatabase數據庫名;
4、顯示某數據表字符集設置:
showcreatetable表名;
5、修改字段:
altertable表名modifycolumn'字段名'varchar(30)charactersetutf8notnull;
6、添加表字段:
altertable表名addcolumn'字段名'varchar(20)charactersetutf8;
mysql如何更改數據庫字符編碼?借助客戶端工具很容易就可以更改了,下面來看一下。
打開navicat客戶端工具,在左邊找到要更改的數據庫。
右鍵點擊這個數據庫,在菜單上點擊數據庫屬性選項。
在彈出的屬性窗口上,點擊默認字符集下的下拉框。
在彈出的下拉選項里,點擊選中要使用的字符集就行了,比如選擇常用的utf8字符集,點擊ok按鈕就行了。
如果用戶想改變表的默認字符集和所有的字符列的字符集到一個新的字符集,使用下面的語句:
ALTER
TABLE
tbl_name
CONVERT
TO
CHARACTER
SET
charset_name;警告:上述操作是在字符集中轉換列值。如果用戶在字符集(如
gb2312)中有一個列,但存儲的值使用的是其它的一些不兼容的字符集(如
utf8),那么該操作將不會得到用戶期望的結果。在這種情況下,用戶必須對每一列做如下操作:
ALTER
TABLE
t1
CHANGE
c1
c1
BLOB;
ALTER
TABLE
t1
CHANGE
c1
c1
TEXT
CHARACTER
SET
utf8;
這樣做的原因是:從
BLOB
列轉換或轉換到
BLOB
列沒有轉換發生。
如果用戶指定以二進制進行
CONVERT
TO
CHARACTER
SET,則
CHAR、VARCHAR
和
TEXT
列將轉換為它們對應的二進制字符串類型(BINARY,VARBINARY,BLOB)。這意味著這些列將不再有字符集,隨后的
CONVERT
TO
操作也將不會作用到它們上。
如果僅僅改變一個表的缺省字符集,可使用下面的語句:
ALTER
TABLE
tbl_name
DEFAULT
CHARACTER
SET
charset_name;
DEFAULT是可選的。當向一個表里添加一個新的列時,如果沒有指定字符集,則就采用缺省的字符集(例如當ALTER
TABLE
...
ADD
column)。
ALTER
TABLE
...
DEFAULT
CHARACTER
SET
和
ALTER
TABLE
...
CHARACTER
SET
是等價的,修改的僅僅是缺省的表字符集。
網站名稱:mysql字符集怎么修改 修改mysql字符集和排序規則
文章分享:http://m.newbst.com/article6/ddcogog.html
成都網站建設公司_創新互聯,為您提供服務器托管、ChatGPT、移動網站建設、電子商務、定制網站、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯