MySql默认编码所造成的乱码麻烦1.222
1、前言
? ? MySQL在安裝時,最后的一步,會讓你選擇MySQL服務器及客戶端、數據庫、連接接口的默認編碼。通常可選擇
UTF8和GB2312.
? ? 但是,如果你選擇了utf8的時候,恰好你要從另一個數據庫上遷移一個gb2312編碼格式的數據庫過來,且那個系統的前端和后端都是gb2312編碼的時候,直接新建數據庫,導入數據恐怕會產生亂碼了。
2、安裝MySQL之后修改編碼方式
? ? ? ?MySQL的默認編碼是Latin1,不支持中文,要支持中午需要把數據庫的默認編碼修改為gbk或者utf8。 ? ? ??1、需要以root用戶身份登陸才可以查看數據庫編碼方式(以root用戶身份登陸的命令為:? ? ? >mysql -u root –p,之后兩次輸入root用戶的密碼),查看數據庫的編碼方式命令為:
? ?>show variables like 'character%'; 或者 > status +--------------------------+----------------------------+? | Variable_name | Value |? +--------------------------+----------------------------+? | character_set_client | latin1 |? | character_set_connection | latin1 |? | character_set_database | latin1 |? | character_set_filesystem | binary |? | character_set_results | latin1 |? | character_set_server | latin1 |? | character_set_system | utf8 |? | character_sets_dir | /usr/share/mysql/charsets/ |? +--------------------------+----------------------------+
從以上信息可知數據庫的編碼為latin1,需要修改為gbk或者是utf8;
其中,character_set_client為客戶端編碼方式;
? ? ? character_set_connection為建立連接使用的編碼;
? ? ? character_set_database數據庫的編碼;
? ? ? character_set_results結果集的編碼;
? ? ? character_set_server數據庫服務器的編碼;
只要保證以上四個采用的編碼方式一樣,就不會出現亂碼問題。
另一個查看數據庫編碼的命令:
>show variables like ‘collation%’;
2、linux系統下,修改MySQL數據庫默認編碼的步驟為:
- 停止MySQL的運行 /etc/init.d/mysql start (stop)?為啟動和停止服務器
-
MySQL主配置文件為my.cnf,一般目錄為/etc/mysql
var/lib/mysql/?放置的是數據庫表文件夾,這里的mysql相當于windows下mysql的date文件夾
- 當我們需要修改MySQL數據庫的默認編碼時,需要編輯my.cnf文件進行編碼修改,在linux下修改mysql的配置文件my.cnf,文件位置默認/etc/my.cnf文件?
找到客戶端配置[client]?在下面添加? default-character-set=utf8?默認字符集為utf8? 在找到[mysqld]?添加? default-character-set=utf8?默認字符集為utf8? init_connect='SET NAMES utf8'?(設定連接mysql數據庫時使用utf8編碼,以讓mysql數據庫為utf8運行)?
修改好后,重新啟動mysql?即可,重新查詢數據庫編碼可發現編碼方式的改變:
此方法用于標準mysql版本同樣有效,對于/etc/my.cnf文件,需要從mysql/support-files的文件夾cp my-large.cnf一份到/etc/my.cnf
3、windows系統下可以刪除MySQL數據庫,并重新安裝,在安裝過程中可以直接用Mysql Server Instance Config Wizard?進行設置
? 4、當MySQL數據庫服務器已經有數據不適合刪除重裝時,可以個別指定數據庫的編碼方式。MySQL指定編碼的方式是非常靈活并多樣化的,可以指定表級別的編碼,行級別編碼,甚至可以指定字段級別的編碼。
?以下示例給出創建數據庫時指定編碼的兩種方式:
?1)CREATE DATABASE ms_db CHARACTER SET utf8 COLLATE utf8_general_ci;
?2)create database if not exists netctoss default character set utf8;
? ?5、如果你采用的是外部接入的方式,可以在連接中確定請求的編碼格式如:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出現任何空格,否則出錯)
? ?6、執行腳本:指定編碼格式set names gbk(注意,不是UTF-8)可以修改
執行前:
執行后:
從執行命令前后可知,set names gbk只可以修改character_set_client、character_set_connection、character_set_results的編碼方式,并且這種修改是窗口級別的,只針對本窗口有效,打開另外一個窗口修改無效。也可發現數據庫底層的編碼方式沒有改變,插入數據后還是以utf8編碼方式保持。
3、修改mysql數據庫的默認編碼方式
? ? 修改my.ini文件
? ? 加上?default-character-set=gb2312
? ? 設定數據庫字符集
? ? alter database da_name default character set 'charset'
? ? 1)設置數據庫編碼 /etc/my.cnf(Linux下的文件)
? ? [mysqld]
? ? default-character-set=gbk
? ? ...
? ? [client]
? ? default-character-set=gbk
---------------------------------------
? ?2 )按字符集導出
? $mysqldump -u root -p dbname --default-character-set=gbk > a.sql;
? ?3)查看SQL文件的編碼
? ?[ root@localhost gethtml]# file a.sql
? ? ? a.sql: UTF-8 Unicode ...
? ?[root@localhost gethtml]# iconv -f utf-8 -t gbk a.sql > a2.sql
? ?[root@localhost gethtml]# file a2.sql
? ? ? a2.sql: Non-ISO extended-ASCII English text 這時已經是gbk的編碼了
? 3)導入
? 查看數據庫服務和客戶端字符集?
? ?mysql> status;
? ?Server characterset:??? gbk
? ?Db???? characterset:????? gbk
? ?Client characterset:????? latin1
? ?Conn. characterset:???? latin1
? ?mysql> set names 'gbk';?? //這樣
? ?mysql> status;
? Server characterset:?? gbk
? Db???? characterset:???? gbk
? Client characterset:???? gbk
? Conn. characterset:??? gbk
? 這時才能導數據
? mysql> source a.sql;
----------------------------------------------------------------------------------
? 單獨設置某個數據庫:
? alter database testdb character set utf8;
? 查看mysql支持的編碼:
? show character set;
? 查看系統的字符集和排序方式的設定可以通過下面的兩條命令:
? mysql> SHOW VARIABLES LIKE ''character_set_%'';
? LINUX 如下:
? 1)導出數據
? [root@www.cnscn.org ~]$ mysqldump -u root -p dbname --default-character-set=gbk > base_user.sql;
? 2)查看導出的sql文件的編碼
? [root@www.cnscn.org ~]$ file base_user.sql?
base_user.sql: UTF-8 Unicode text, with very long lines
3)轉成要用的編碼
[root@www.cnscn.org ~]$ iconv -f utf-8 -t gbk base_user.sql >base_user_gbk.sql
4)連接數據庫并查看當前庫的編碼
[root@www.cnscn.org ~]$ mysql -uroot
mysql> use testdb;
mysql> status;
??? Server characterset:??? latin1
??? Db???? characterset:??? gbk
??? Client characterset:??? latin1
??? Conn. characterset:??? latin1
5)設置成需要的編碼
mysql>set names 'gbk';
6)查看現在的編碼
mysql> status;
??? Server characterset:??? latin1
??? Db???? characterset:??? gbk
??? Client characterset:??? gbk
??? Conn. characterset:??? gbk
7)導入我們轉換成gbk后的文件
mysql> source base_user_gbk.sql;
轉載于:https://www.cnblogs.com/tham/p/6827318.html
總結
以上是生活随笔為你收集整理的MySql默认编码所造成的乱码麻烦1.222的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用无锁的方式和有锁的方式的程序性能对比
- 下一篇: Ioc Autofac心得