mysql資料庫中字符集的問題,mysql字符集是什麼意思

本文目錄一覽:

mysql字符集問題 請教怎麼解決

Liunx下修改MySQL字符集:

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

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.

5.查看字符集設置

mysql show variables like ‘collation_%’;

+———————-+—————–+

| Variable_name | Value |

+———————-+—————–+

| collation_connection | utf8_general_ci |

| collation_database | utf8_general_ci |

| collation_server | utf8_general_ci |

+———————-+—————–+

3 rows in set (0.02 sec)

mysql show variables like ‘character_set_%’;

+————————–+—————————-+

| Variable_name | Value |

+————————–+—————————-+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+————————–+—————————-+

8 rows in set (0.02 sec)

mysql

其他的一些設置方法:

修改資料庫的字符集

mysqluse mydb

mysqlalter database mydb character set utf-8;

創建資料庫指定資料庫的字符集

mysqlcreate database mydb character set utf-8;

通過配置文件修改:

修改/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

通過MySQL命令行修改:

mysql set character_set_client=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql set character_set_connection=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql set character_set_database=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql set character_set_results=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql set character_set_server=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql set character_set_system=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql set collation_connection=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql set collation_database=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql set collation_server=utf8;

Query OK, 0 rows affected (0.01 sec)

查看:

mysql show variables like ‘character_set_%’;

+————————–+—————————-+

| Variable_name | Value |

+————————–+—————————-+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+————————–+—————————-+

8 rows in set (0.03 sec)

mysql show variables like ‘collation_%’;

+———————-+—————–+

| Variable_name | Value |

+———————-+—————–+

| collation_connection | utf8_general_ci |

| collation_database | utf8_general_ci |

| collation_server | utf8_general_ci |

+———————-+—————–+

3 rows in set (0.04 sec)

希望能幫到你,如果滿意請及時採納~

怎樣修改mysql資料庫字符集

首先,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 = xutf8;

但這三個參數是不能寫在配置文件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參數方便管理。

MySQL中資料庫的默認字符集和校對規則有哪些?

1. ASCII

用途:用來映射簡單的單位元組字元,比如大小寫英文字母、阿拉伯數字、常用的標點符、運算符、控制字元等。

編碼範圍:U+0000 – U+007F

注意:對於用這類字元的場景夠用了,但是卻無法表達比如漢字,日文等編碼。

2. UNICODE

用途:用來映射包含 ASCII 以內的其他的所有字元。

編碼範圍:U+0000 – U+10FFFF

注意:ASCII 是 UNICODE 的子集,ASCII 編碼的字元可以無損轉換為 UNICODE 編碼的字元。

MySQL 常用字符集

1. Latin1

Latin1 是 cp1252 或者 ISO-8859-1 的別名。ISO-8859-1 編碼是單位元組編碼,向下兼容 ASCII。

編碼範圍:U+0000 – U+00FF

ISO-8859-1 收錄的字元除 ASCII 收錄的字元外,還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字元號。

單位元組內的空間都被 ISO-8859-1 編碼佔用,所以能夠用 ISO-8859-1 編碼存儲、傳輸其他任何編碼的位元組流。

比如把一個 Utf8mb4 的編碼或者 GBK 的編碼存入 Latin1,不會有任何問題。因為 Latin1 保留了原始的位元組流,這也就是 MySQL 長期以來把 Latin1 做默認字符集的原因。

但是由於 Latin1 對任何字元都存放位元組流,造成了字元個數的浪費。

比如:

CHAR(10) CHARACTER SET LATIN1;CHAR(10) CHARACTER SET UTF8;

該欄位中存儲字元個數 UTF8 是 Latin1 的三倍!!!

2. GB18030

GB18030 是中國官方標準字符集,向前兼容 GBK、GB2312,是這兩個的超集。用 1、2、4 個位元組分別表示一個符號。比如對一般中文字元,默認是用兩個位元組編碼存儲。Windows 系統,默認用的就是 GB18030。

若只是存儲中文字元,那 GB18030 最佳。

原因有兩點:

1)佔用空間小,比如比 UTF8 小。

2)存儲的漢字根據拼音來排序,檢索快。

3. UTF8

UTF8 是 Unicode 的編碼實現,可以存儲 UNICODE 編碼對應的任何字元, 這也是使用最多的一種編碼。最大的特點就是變長的編碼方式,用 1 到 4 個位元組表示一個符號,可以根據不同的符號編碼位元組長度。

字母或數字用 1 位元組,漢字用 3 位元組,emoji 表情符號用 4 位元組。UTF8 字符集目前是使用最廣泛的。

注意!MySQL 里常說的 UTF8 是 UTF8MB3 的別名,UTF8MB3 是 UTF8MB4 的子集,UTF8MB4 才是真正的 4 位元組 UTF8 字符集!

UTF8MB3 表示最大支持 3 個位元組存儲字元,UTF8MB4 表示最大 4 個位元組存儲字元。根據實際需要和未來展望,MySQL 8.0 已經默認用 UTF8MB4 基礎字符集。

請教mysql 字符集的問題。

跟mysql字符集有關的有:

1. 資料庫的的字符集

2. 文本欄位( varchar , text ,char ) 的字符集

你指的是哪個呢?

以下例子以utf8為字符集(注意是utf8 不是 utf-8 )

建庫時指定字符集: create database XXXX charset utf8

一旦在建庫時指定了字符集,在建表時就可以不用指定字符集了,它會默認繼承資料庫的字符集。

如果建表時還想指定字符集:create table XXXX ( xxxxxxx ) type=MyISAM default charset utf8

create table XXXX ( aa varchar(8) charset utf8, bb char(4) charset utf8) type=MyISAM default charset utf8;

一旦設置了utf8為字符集,在讀取時,特別是用作網頁作為輸出 和 從網頁接受數據時,要注意:

1. 請將網頁的編碼設置為 utf-8 (請注意是 utf-8 不是 utf8 )

2. 在進行 資料庫操作 之前請先執行一下SQL: set names utf8 , 然後再執行其它SQL語句

上面的思想是:請盡量保持所有的操作都用同一種編碼。

如何更改mysql資料庫的字符集

(1) 最簡單的修改方法,就是修改mysql的my.ini文件中的字符集鍵值,

如 default-character-set = utf8

character_set_server = utf8

修改完後,重啟mysql的服務,service mysql restart

使用 mysql SHOW VARIABLES LIKE ‘character%’;查看,發現資料庫編碼均已改成utf8

+————————–+———————————+ | Variable_name | Value | +————————–+———————————+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:”mysql-5.0.37″share”charsets” | +————————–+———————————+

(2) 還有一種修改mysql默認字符集的方法,就是使用mysql的命令

mysql SET character_set_client = utf8 ; mysql SET character_set_connection = utf8 ; mysql SET character_set_database = utf8 ; mysql SET character_set_results = utf8 ; mysql SET character_set_server = utf8 ; mysql SET collation_connection = utf8 ; mysql SET collation_database = utf8 ; mysql SET collation_server = utf8 ;

一般就算設置了表的mysql默認字符集為utf8並且通過UTF-8編碼發送查詢,你會發現存入資料庫的仍然是亂碼。問題就出在這個connection連接層上。解決方法是在發送查詢前執行一下下面這句:

SET NAMES ‘utf8’;

它相當於下面的三句指令:

SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;

MySQL字符集問題

試一試 在Servers 下有個server.xml 的Connector 里加上URIEncoding=”utf-8″

原創文章,作者:URFU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139818.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
URFU的頭像URFU
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智慧等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • 如何修改mysql的埠號

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

    編程 2025-04-29
  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示「文件中含有宏,保存將導致宏不可用」的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • Java Thread.start() 執行幾次的相關問題

    Java多線程編程作為Java開發中的重要內容,自然會有很多相關問題。在本篇文章中,我們將以Java Thread.start() 執行幾次為中心,為您介紹這方面的問題及其解決方案…

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

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

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網路爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • NodeJS 建立TCP連接出現粘包問題

    在TCP/IP協議中,由於TCP是面向位元組流的協議,發送方把需要傳輸的數據流按照MSS(Maximum Segment Size,最大報文段長度)來分割成若干個TCP分節,在接收端…

    編程 2025-04-29
  • 如何解決vuejs應用在nginx非根目錄下部署時訪問404的問題

    當我們使用Vue.js開發應用時,我們會發現將應用部署在nginx的非根目錄下時,訪問該應用時會出現404錯誤。這是因為Vue在刷新頁面或者直接訪問非根目錄的路由時,會認為伺服器上…

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

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

    編程 2025-04-29
  • 如何解決egalaxtouch設備未找到的問題

    egalaxtouch設備未找到問題通常出現在Windows或Linux操作系統上。如果你遇到了這個問題,不要慌張,下面我們從多個方面進行詳細闡述解決方案。 一、檢查硬體連接 首先…

    編程 2025-04-29

發表回復

登錄後才能評論