mysql 插入中文亂碼解決方案 轉
轉自http://www.cnblogs.com/pricks
"
MySQL 4.1的字符集支援(Character Set Support)有兩個方面:字符集(Character set)和排序方式(Collation)。對於字符集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和連線(connection)。下面將分兩部分,分別設定伺服器編碼和資料 庫、資料表與連線部分的編碼,從而杜絕中文亂碼的出現。
一 伺服器編碼設定
伺服器編碼設定方法有二:
一是安裝mysql時,其中會有一個步驟選擇編碼方式,此時選擇gbk即可。如果不選擇,預設的編碼是latin1;
二是在安裝玩mysql之後,手動修改其配置檔案,如下:
(1)修改 MySql安裝目錄下面的my.ini(MySQL Server Instance Configuration 檔案)。 設定
default-character-set=gbk(注意,有2處)
(2)修改data目錄中相應資料庫目錄下的db.opt配置檔案
(2)修改data目錄中相應資料庫目錄下的db.opt配置檔案
default-character-set=gbk
default-collation=gbk_chinese_ci
重啟資料庫,關閉控制檯視窗重新登入資料庫即可。
二 資料庫、資料表和連線部分的編碼設定
2.1 設定資料庫和資料表編碼
要解決亂碼問題,首先必須弄清楚資料庫和資料表用什麼編碼。如果沒有指明,將是預設的latin1。
用得最多的應該是這3種字符集 gb2312,gbk,utf8。
如何去指定資料庫和資料表的字符集呢?下面也gbk為例:
【在MySQL Command Line Client建立資料庫 】
mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
其中後面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定資料庫的字符集,COLLATE (校勘),讓mysql同時支援多種編碼的資料庫。
當然也可以透過如下指令修改資料庫資料表的字符集:
alter database mysqlcode default character set 'gbk'.
前面已經設定了伺服器、資料庫和資料表的編碼,那麼資料庫中的編碼便都是gbk,中文可以儲存進去。
用得最多的應該是這3種字符集 gb2312,gbk,utf8。
如何去指定資料庫和資料表的字符集呢?下面也gbk為例:
【在MySQL Command Line Client建立資料庫 】
mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
其中後面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定資料庫的字符集,COLLATE (校勘),讓mysql同時支援多種編碼的資料庫。
當然也可以透過如下指令修改資料庫資料表的字符集:
alter database mysqlcode default character set 'gbk'.
前面已經設定了伺服器、資料庫和資料表的編碼,那麼資料庫中的編碼便都是gbk,中文可以儲存進去。
但是如果你要透過執行insert或select等操作時,仍然會出現中文亂碼問題,這是因為還沒設定
“連線(connection)”部分的編碼,而insert、select等資料庫操作都包含與資料庫的連線動作。如果不信
,你現在可以執行下面的sql文試一試:
mysql> insert into mysqlcode values(null,'java愛好者');
按回車,結果如下:
按回車,結果如下:
ERROR 1406 (22001): Data too long for column 'content' at row 1
2.2 設定連線編碼
設定了伺服器、資料庫和資料表部分的編碼,必須設定連線編碼。連線編碼設定如下:
mysql> SET character_set_client='gbk';
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
設定好連線編碼,下面便可以成功插入中文了:
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
設定好連線編碼,下面便可以成功插入中文了:
mysql> insert into mysqlcode values(null,'java愛好者');
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
其實,上面設定連線編碼的三條命令可以簡化為一條:
mysql> set names 'gbk';
設定好了連線編碼後,在select查詢時,也能正確顯示中文:
mysql> select * from mysqlcode;
+----+-----------+
| id | content |
+----+-----------+
| 1 | java愛好著 |
+----+-----------+
1 row in set (0.00 sec)
+----+-----------+
| id | content |
+----+-----------+
| 1 | java愛好著 |
+----+-----------+
1 row in set (0.00 sec)
三 完整示例
下面將用一個例子完整地將上面的理論演示一遍,最後達到能向mysql中插入中文的目的:
3.1 設定mysql伺服器編碼
這一步請參見上文第一節,主要就是在安裝mysql之後,修改my.ini和dataTable.db中的編碼為gbk
3.2 建立一個資料庫
先連線到本地資料庫:mysql -h localhost -u root -proot,接著建立一個資料庫:
mysql> create database test;
3.3 建立資料表並設定其編碼
-- 中文編碼測試資料表
use test
DROP TABLE IF EXISTS `test`.`test_nml`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = gbk;
CREATE TABLE `test`.`test_nml` (
`id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` VARCHAR( 255 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='使用者基本資訊';
SET character_set_client = @saved_cs_client;
DROP TABLE IF EXISTS `test`.`test_nml`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = gbk;
CREATE TABLE `test`.`test_nml` (
`id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` VARCHAR( 255 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='使用者基本資訊';
SET character_set_client = @saved_cs_client;
這裡的紅色部分等價於上文中的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
3.4 插入中文資料
--插入資料
SET @saved_cs_client = @@character_set_client;
set names gbk;
insert into test_nml values(null,'我是中文');
SET @saved_cs_client = @@character_set_client;
set names gbk;
insert into test_nml values(null,'我是中文');
注意:每次執行insert或update或select連線操作時,都必須設定編碼,即在前面加上:set names 'gbk';
"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1257376/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決MySQL中文亂碼和插入中文不顯示的方法MySql
- navicat for mysql顯示中文亂碼解決方案MySql
- 解決Hibernate向MySQL資料庫插入中文亂碼問題MySql資料庫
- MySql中文亂碼問題解決MySql
- 解決MySQL中文亂碼問題MySql
- SecureCRT 下MySQL中文亂碼問題終極解決方案SecurecrtMySql
- css中文字型亂碼解決方案CSS
- python 中文亂碼問題解決方案Python
- 讀mysql中文亂碼問題解決方法MySql
- java連線mysql中文亂碼解決之道JavaMySql
- MySQL4.1的latin1編碼與中文、藏文亂碼解決方案MySql
- oracle 輸出中文亂碼問題解決方案Oracle
- Linux終端中文菱形亂碼解決方案Linux
- hibernate插入中文到mysql資料庫亂碼MySql資料庫
- MySQL字符集亂碼與解決方案MySql
- RHEL中文亂碼解決
- HttpClient 解決中文亂碼HTTPclient
- mysql 匯入中文亂碼解決一例MySql
- [原創]Gerrit中文亂碼問題解決方案分享
- JSP中文亂碼問題終極解決方案JS
- eclipse 中文亂碼問題解決方案彙總Eclipse
- ORACLE亂碼解決方案Oracle
- Java亂碼解決方案Java
- request/response解決中文亂碼
- eclipse中文亂碼解決Eclipse
- myeclipse解決中文亂碼Eclipse
- 解決Linux中文亂碼Linux
- ROS中解決中文亂碼ROS
- 解決中文亂碼問題
- Mysql中文亂碼問題的最佳解決方法MySql
- Mac下navicat for mysql中文顯示亂碼解決方法MacMySql
- mysql中文亂碼MySql
- Datagrip連線SQLserver表中出現中文亂碼解決方案SQLServer
- JSP中文亂碼問題終極解決方案(上)JS
- ajax呼叫,action返回的中文為亂碼的解決方案
- Jmeter 解決中文亂碼問題JMeter
- 解決 SecureCRT 和 SecureFX 中文亂碼Securecrt
- Java 解決中文亂碼問題Java