本文目錄一覽:
- 1、mysql的字元編碼轉換問題!
- 2、(緊急)mysql欄位類型轉換成utf16
- 3、如何解決MySQL表編碼轉換問題
- 4、怎麼查看mysql的資料庫編碼格式
- 5、PHP mysql 如何將從數據中讀入的中文亂碼轉換成中文字元?
- 6、mysql資料庫表裡中文亂碼應該選哪種編碼?
mysql的字元編碼轉換問題!
mysql的資料庫就有字符集設置,把數據備份成sql文件,然後把資料庫的字符集設置成你想要的,再導入。
(緊急)mysql欄位類型轉換成utf16
MySQL 支持多種存儲編碼,如果存儲中文,可以選用 GB2312、UTF-8 或 UTF-16(UCS2) 作為存儲編碼。如果還要考慮國際化,那麼就只能用 UTF-8 或 UTF-16。
UTF-8 使用 1 個位元組表示數字和英文字母,使用 2 個或 3 個位元組表示一個漢字,而 UTF-16 則固定使用 2 個位元組。因此,在中文的比重比較大的情況下,使用 UTF-16 會更節省空間。
但是,如果你的 MySQL 是作為 Web 的後端存儲,就不能只考慮存儲時的編碼了,還需要考慮查詢和輸出的編碼。由於網頁中 HTML 標籤的代碼比重較大,所以在國際化的網站(如 Google)中,網頁上採用的是 UTF-8 編碼,以減小頁面文件大小,降低帶寬壓力。
這種情況下,如果存儲時採用了 UTF-16,那麼在提交數據到 MySQL,或把查詢結果輸出到頁面時,必定要進行編碼轉,無疑增加了伺服器的壓力。
因此,對存儲編碼的選擇,最終還是對時間和空間的選擇。
在大部分情況下,我們的數據中的中文比重並不是太大,所以,建議使用 UTF-8 作為存儲編碼。
如何解決MySQL表編碼轉換問題
1. 修改數據update
2. 寫binlog
注意此處的update和commit/rollback都由存儲引擎實現,mysql只是站在邏輯的高度上理解這些操作。
怎麼查看mysql的資料庫編碼格式
1、查看資料庫編碼格式
mysql show variables like ‘character_set_database’
2、查看數據表的編碼格式
mysql show create table 表名;
3、創建資料庫時指定資料庫的字符集
mysqlcreate database 資料庫名 character set utf8;
4、創建數據表時指定數據表的編碼格式
create table tb_books (
name varchar(45) not null,
price double not null,
bookCount int not null,
author varchar(45) not null ) default charset = utf8;
5、修改資料庫的編碼格式
mysqlalter database 資料庫名 character set utf8;
6、修改數據表格編碼格式
mysqlalter table 表名 character set utf8;
7、修改欄位編碼格式
mysqlalter table 表名 change 欄位名 欄位名 類型 character set utf8;
mysqlalter table user change username username varchar(20) character set utf8 not null;
PHP mysql 如何將從數據中讀入的中文亂碼轉換成中文字元?
要解決亂碼首先需要知道出現亂碼的原因:
一、PHP+MySQL出現中文亂碼的原因。
1. MYSQL資料庫的編碼是utf8,與PHP網頁的編碼格式不一致,就會造成MYSQL中的中文亂碼。
2. 使用MYSQL中創建表、或者選擇欄位時設置的類型不是utf8,而網頁編碼不是utf8,也可能造成MYSQL中文亂碼.
3. PHP頁面的字符集與資料庫的編碼不一致。
4. PHP連接MYSQL資料庫,操作是設定的語句指定的編碼和頁面編碼,PHP頁面編碼不一致。
5. 用戶提交的HTML頁面編碼,和顯示數據的頁面編碼不一致 ,就肯定會造成PHP頁面亂碼.
二、解決中文亂碼:
1. 網頁編碼設置。一般在HTML代碼中的文件頭html中加入屬性:
meta http-equiv=」Content-Type」 content=」text/html; charset=utf-8″
保證,網頁是”utf-8″編碼。
2. PHP代碼設置。在php代碼的開始部分加入以下代碼:
header(」Content-type: text/html;charset=utf-8″);
且要求保存的文件編碼方式是utf-8,這樣就保證了該文件也是utf-8編碼。
3. 資料庫中表的欄位中存儲中文的部分,要設置為utf8_general_ci類型。
4.PHP在連接資料庫操作時,要設置操作的欄位類型為utf8,設置方法如下:
mysql_connect(』localhost』,’user』,’password』);mysql_select_db(』db』);mysql_query(」set names utf8;」); //**設置字符集***
mysql資料庫表裡中文亂碼應該選哪種編碼?
資料庫中關於字符集的種類有很多,個人建議,資料庫字符集盡量使用utf8(utf-8),以使你的數據能很順利的實現遷移,因為utf8字符集是目前最適合於實現多種不同字符集之間的轉換的字符集,儘管你在命令行工具上無法正確查看資料庫中的內容,我依然強烈建議使用utf8作為默認字符集.如果你想使用gb2312編碼,那麼建議你使用latin1作為數據表的默認字符集,這樣就能直接用中文在命令行工具中插入數據,並且可以直接顯示出來.而不要使用gb2312或者gbk等字符集,如果擔心查詢排序等問題,可以使用binary屬性約束 對編程有影響的主要是客戶端字符集和資料庫字符集(還有一個伺服器字符集,不知道幹什麼用的), 資料庫中常用的操作就是保存數據和讀取數據,在這過程中,亂不亂碼和資料庫字符集貌似沒有什麼關係。我們只要保證寫入時選擇的字符集和讀取時選擇的字符集一致,即只需保證兩次操作的客戶端字符集一致即可。 \x0d\x0a在MySQL的客戶端上執行一次查詢的過程一般是,在客戶端的提示符後面輸入一條SQL語句,回車,然後終端顯示出查詢的結果。這個過程中,只有終端和三個MySQL的系統變數指定了正確的字符集,才能保證我們將一個正確的SQL語句送到伺服器,然後伺服器返回正確的結果,並且在終端正確顯示。 \x0d\x0a三個MySQL的系統變數是: \x0d\x0a1. character_set_client,終端字符集,告訴Server客戶端提交的SQL語句的編碼格式 \x0d\x0a2. character_set_connection,連接字符集,是伺服器翻譯SQL語句時用到的編碼格式 \x0d\x0a3. character_set_results,返回的結果集的字符集,是伺服器返回結果集之前把結果集轉換成的編碼格式 \x0d\x0a在MySQL終端通過執行命令 show variables like 『char%』 可以查看這幾個變數的值。這三個變數通常都設定為同一種字符集,用命令set names [charset name]就可以修改這三個變數的值。一般來說,只要你設定了能夠表示你的數據的字符集,你查詢的結果都可以在終端正確顯示。 \x0d\x0a舉個例子,使用的表t1是utf8編碼,表中的欄位c1繼承了這個編碼,表創建如下 \x0d\x0amysql create table t1 ( c1 text not null ) character set utf8; \x0d\x0a用的字元是漢字「范」,gbk編碼為B7 B6,utf8編碼為E8 8C 83 \x0d\x0a用下面的SQL語句插入數據 \x0d\x0amysql insert into t1 values( 『范』); \x0d\x0aa)如果終端設置為utf8,並且執行了 set names utf8,那麼插入到資料庫中的就是「范」這個字的utf8編碼,這個過程中MySQL不需要做編碼轉換。寫入資料庫的內容可以通過執行 select hex( c1 ) from t1 得到數據的十六進位編碼來驗證。 \x0d\x0a\x0d\x0ab)如果終端設置為 utf8,並且執行了set names gbk,那麼執行完這個插入操作後,寫入的二進位數據是E9 91 BC,這是「漢字「鑼」的utf8編碼。這是因為,終端輸入的「范」用的是utf8編碼,而伺服器以為終端發送過來的內容是gbk編碼,所以在向t1表中插入的時候進行了一次gbk到utf8的轉換,結果當然是錯誤的。 \x0d\x0a\x0d\x0ac)如果終端設置為gbk,並且執行了set names gbk,那麼執行完插入操作後,寫入t1的依然是「范」這個字的utf8編碼。插入過程中,終端輸入的是「范」的gbk編碼B7 B6,伺服器被告知終端發過來的SQL語句是gbk編碼(由character_set_client指定),所以在插入數據前做了一次gbk到utf8的編碼轉換。 \x0d\x0a\x0d\x0ad)如果終端設置為gbk,並且執行了set names utf8,那麼執行完插入操作後,MySQL會報出一個數據被截斷的警告。實際上,輸入終端的是「范」這個字元的gbk編碼B7 B6,而伺服器被告知客戶端發過來的SQL語句是utf8編碼,所以在執行過程中沒有做轉碼,直到插入數據的時候,發現B7 B6不符合utf8的編碼規則,給出了警告信息,實際插入的數據是3F 3F,也就是兩個問號。 \x0d\x0a\x0d\x0a查詢的時候是同樣的道理,MySQL也是根據set names設定的字符集來對返回給客戶端的結果集做相應的編碼轉換,如果轉換的結果和終端顯示的字符集一致,就能正確顯示,如果不一致就是亂碼。 \x0d\x0a\x0d\x0a結論是,只要終端的字符集和set names指定的字符集一致就可以讓MySQL在處理過程中執行正確的轉碼並且正確地顯示。 \x0d\x0a\x0d\x0a另外,如果通過程序操作MySQL資料庫, 那麼也需要事先執行set names命令來指定程序希望輸出的字符集。比如,用程序從一個utf8編碼的資料庫向另外一個gbk編碼的資料庫進行數據遷移,在選取源資料庫數據之前,需要執行set names gbk,才能取到gbk編碼的數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152960.html