久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL數據庫字符集有哪些

151次閱讀
沒有評論

共計 5613 個字符,預計需要花費 15 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關 MySQL 數據庫字符集有哪些,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、字符集、字符序的概念與聯系

在數據的存儲上,MySQL 提供了不同的字符集支持。而在數據的對比操作上,則提供了不同的字符序支持。MySQL 提供了不同級別的設置,包括 server 級、database 級、table 級、column 級,可以提供非常精準的設置。

什么是字符集、字符序? 簡單的來說:

字符集 (character set):定義了字符以及字符的編碼。

字符序 (collation):定義了字符的比較規則。

舉個例子:

有四個字符:A、B、a、b,這四個字符的編碼分別是 A = 0, B = 1, a = 2, b = 3。這里的字符 +   編碼就構成了字符集 (character set)。

二、MySQL 支持的字符集、字符序

MySQL 支持多種字符集 與 字符序。

一個字符集對應至少一種字符序 (一般是 1 對多)。

兩個不同的字符集不能有相同的字符序。

每個字符集都有默認的字符序。

1. 查看支持的字符集

可以通過以下方式查看 MYSQL 支持的字符集。

SHOW CHARACTER SET; select * from information_schema.HARACTER_SETS;

2. 查看支持的字符序

可以通過如下方式查看 MYSQL 支持的字符序。

SHOW COLLATION WHERE Charset =  utf8  SELECT * FROM information_schema.COLLATIONS WHERE CHARACTER_SET_NAME= utf8

三、系統的字符集 (character_set_system)

character_set_system 為元數據的字符集,即所有的元數據都使用同一個字符集。試想如果元數據采用不同字符集,INFORMATION_SCHEMA 中的相關信息在不同行之間就很難展示。同時該字符集要能夠支持多種語言,方便不同語言人群使用自己的語言命名 database、table、column。MySQL 選擇 UTF- 8 作為元數據編碼,用源碼固定。

查看 system 字符集:

select @@global.character_set_system;

因為很少設定,所以就不做指定介紹了。

四、server 的字符集、字符序 (character_set_server/collation_server)

當 create  database 沒有指定 charset/collation 就會用 character_set_server/collation_server,這兩個變量可以動態設置,有 session/global 級別。

在源碼中 character_set_server/collation_server 實際對應一個變量,因為一個 collation 對應著一個 charset,所以源碼中只記錄 CHARSET_INFO 結構的 collation_server 即可。當修改 character_set_server,會選擇對應 charset 的默認 collation。對于其他同時有 charset 和 collation 的變量,源碼記錄也都是記錄 collation。

character_set_server、collation_server 分別對應 server 字符集、server 字符序。

1. 查看 server 字符集、字符序

分別對應 character_set_server、collation_server 兩個系統變量。

SET GLOBAL SHOW_COMPATIBILITY_56=ON; SHOW VARIABLES LIKE  character_set_server  SHOW VARIABLES LIKE  collation_server

2. 啟動服務時指定

可以在 MySQL 服務啟動時,指定 server 字符集、字符序。如不指定,默認的字符序分別為 latin1、latin1_swedish_ci

mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci

3. 配置文件指定

除了在命令行參數里指定,也可以在配置文件里指定,如下所示。

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect= SET NAMES utf8  character-set-server = utf8

4. 運行時修改

例子:運行時修改 (重啟后會失效,如果想要重啟后保持不變,需要寫進配置文件里)

mysql  SET character_set_server = utf8 ;

5. 編譯時指定默認字符集、字符序

character_set_server、collation_server 的默認值,可以在 MySQL 編譯時,通過編譯選項指定:

cmake . -DDEFAULT_CHARSET=latin1 -DDEFAULT_COLLATION=latin1_german1_ci

6. 實例

通過設置 session 中不同的 character_set_server 使創建 database 的默認 charset 和 collation 不同。

set character_set_server= utf8  create database d1; select * from information_schema.schemata where SCHEMA_NAME= d1  set character_set_server= latin1  create database d2; select * from SCHEMATA where SCHEMA_NAME= d2

五、database 的字符集、字符序 (character_set_database/collation_database)

指定數據庫級別的字符集、字符序。同一個 MySQL 服務下的數據庫,可以分別指定不同的字符集 / 字符序。該變量值 session 級別表示當前 database 的 charset/collation,在后面的源碼版本中該變量可能修正為只讀,不建議修改該值。其 global 級別變量后面也會移除。

1. 設置數據的字符集 / 字符序

可以在創建、修改數據庫的時候,通過 CHARACTER SET、COLLATE 指定數據庫的字符集、排序規則。

- 創建數據庫:

CREATE DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

修改數據庫:

ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

例子:創建數據庫 test_schema,字符集設置為 utf8,此時默認的排序規則為 utf8_general_ci。

CREATE DATABASE `test_schema` DEFAULT CHARACTER SET utf8;

2. 查看數據庫的字符集 / 字符序

有 3 種方式可以查看數據庫的字符集 / 字符序。

查看 test_schema 的字符集、排序規則。(需要切換默認數據庫):

mysql  use test_schema; mysql  SELECT @@character_set_database, @@collation_database;

查看 test_schema 的字符集、數據庫 (不需要切換默認數據庫):

mysql  SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE schema_name= test_schema

查看創建數據庫的語句,來查看字符集:

mysql  SHOW CREATE DATABASE test_schema;

六、table 的字符集、字符序

創建表、修改表的語法如下,可通過 CHARACTER SET、COLLATE 設置字符集、字符序。

CREATE TABLE tbl_name (column_list) [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]] ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]

1. 創建 table 并指定字符集 / 字符序

指定字符集為 utf8,字符序則采用默認的。

CREATE TABLE `test_schema`.`test_table` ( `id` INT NOT NULL COMMENT  , PRIMARY KEY (`id`) COMMENT  ) DEFAULT CHARACTER SET = utf8;

2. 查看 table 的字符集 / 字符序

同樣,有 3 種方式可以查看 table 的字符集 / 字符序。

方式一:通過 SHOW TABLE STATUS 查看 table 狀態,注意 Collation 為 utf8_general_ci,對應的字符集為 utf8。

 SHOW TABLE STATUS FROM test_schema \G;

方式二:查看 information_schema.TABLES 的信息。

 USE test_schema; SELECT TABLE_COLLATION FROM information_schema.TABLES WHERE

方式三:通過 SHOW CREATE  TABLE 確認。

 SHOW CREATE TABLE test_table;

3. table 字符集、字符序如何確定

假設 CHARACTER SET、COLLATE 的值分別是 charset_name、collation_name。如果創建 table 時:

明確了 charset_name、collation_name,則采用 charset_name、collation_name。

只明確了 charset_name,但 collation_name 未明確,則字符集采用 charset_name,字符序采用 charset_name 對應的默認字符序。

只明確了 collation_name,但 charset_name 未明確,則字符序采用 collation_name,字符集采用 collation_name 關聯的字符集。

charset_name、collation_name 均未明確,則采用數據庫的字符集、字符序設置。

七、column 的字符集、排序

類型為 CHAR、VARCHAR、TEXT 的列,可以指定字符集 / 字符序,語法如下:

col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]

1. 新增 column 并指定字符集 / 排序規則

例子如下:(創建 table 類似)

mysql  ALTER TABLE test_table ADD COLUMN char_column VARCHAR(25) CHARACTER SET utf8;

2. 查看 column 的字符集 / 字符序

mysql  SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA= test_schema  AND TABLE_NAME= test_table  AND COLUMN_NAME= char_column  +--------------------+-----------------+ | CHARACTER_SET_NAME | COLLATION_NAME | +--------------------+-----------------+ | utf8 | utf8_general_ci | +--------------------+-----------------+ 1 row in set (0.00 sec)

3. column 字符集 / 排序規則確定

假設 CHARACTER SET、COLLATE 的值分別是 charset_name、collation_name:

如果 charset_name、collation_name 均明確,則字符集、字符序以 charset_name、collation_name 為準。

只明確了 charset_name,collation_name 未明確,則字符集為 charset_name,字符序為 charset_name 的默認字符序。

只明確了 collation_name,charset_name 未明確,則字符序為 collation_name,字符集為 collation_name 關聯的字符集。

charset_name、collation_name 均未明確,則以 table 的字符集、字符序為準。

上述就是丸趣 TV 小編為大家分享的 MySQL 數據庫字符集有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計5613字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 河间市| 清河县| 西乌| 油尖旺区| 黄山市| 恩施市| 和平县| 镇巴县| 军事| 宣化县| 阿鲁科尔沁旗| 东安县| 长海县| 富锦市| 盈江县| 洪雅县| 新建县| 长阳| 普安县| 同江市| 洞口县| 石景山区| 富民县| 东乌珠穆沁旗| 普宁市| 阿克| 崇义县| 关岭| 如皋市| 新郑市| 西安市| 玛多县| 安泽县| 永清县| 房产| 治多县| 利辛县| 沾化县| 蓬溪县| 临沂市| 诏安县|