mysql查詢結果編碼轉換,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-hant/n/152960.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-13 06:07
下一篇 2024-11-13 06:07

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 使用SQL實現select 聚合查詢結果前加序號

    select語句是數據庫中最基礎的命令之一,用於從一個或多個表中檢索數據。常見的聚合函數有:count、sum、avg等。有時候我們需要在查詢結果的前面加上序號,可以使用以下兩種方…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網絡應用中流…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論