MySQL set names 命令_mysql set names 命令和 mysql 字符編碼問題

先看下面的執行結果:

(root@localhost)[(none)]mysql>show variables like 'character%';+--------------------------+-------------------------------------------------------------+

| Variable_name | Value |

+--------------------------+-------------------------------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql-5.6.26-linux-glibc2.5-i686/share/charsets/ |

+--------------------------+-------------------------------------------------------------+

8 rows in set (0.01sec)

(root@localhost)[(none)]mysql>setnames gbk;

Query OK,0 rows affected (0.00sec)

(root@localhost)[(none)]mysql>show variables like 'character%';+--------------------------+-------------------------------------------------------------+

| Variable_name | Value |

+--------------------------+-------------------------------------------------------------+

| character_set_client | gbk |

| character_set_connection | gbk |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | gbk |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql-5.6.26-linux-glibc2.5-i686/share/charsets/ |

+--------------------------+-------------------------------------------------------------+

8 rows in set (0.01sec)

(root@localhost)[(none)]mysql>setnames utf8mb4;

Query OK,0 rows affected (0.00sec)

(root@localhost)[(none)]mysql>show variables like 'character%';+--------------------------+-------------------------------------------------------------+

| Variable_name | Value |

+--------------------------+-------------------------------------------------------------+

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql-5.6.26-linux-glibc2.5-i686/share/charsets/ |

+--------------------------+-------------------------------------------------------------+

8 rows in set (0.00 sec)

The character set used by the server for storing identifiers. The value is always?utf8.

character_set_system 是系統元數據(字段名等)存儲時使用的編碼字符集,該字段和具體存儲的數據無關。總是固定不變的——utf8. 我們可以不去管它。

2. character_set_server

Use?charset_name?as the default server character set. See?Section 10.5, “Character Set Configuration”. If you use this option to specify a nondefault character set, you should also use?--collation-server?to specify the collation.

該變量設置的 server 級別的(mysqld級別的) 字符集。也就是說設置的是 一個 mysqld 的,所有字符最后存儲時,使用的編碼字符集。

默認值為 lantin1. 我們一般設置成:utf8、utf8mb4、gbk 等值。

一同設置的還有 server 級別的排序規則:

collation_server:

utf8mb4_bin, utf8mb4_general_ci, utf8_bin, utf8_general_ci

ci 代表: casesensitive ignore 排序時不考慮大小寫;而 _bin 結尾的排序時考慮大小寫。

3. character_set_database

Every database has a database character set and a database collation. The?CREATE DATABASE?and?ALTER DATABASE?statements have optional clauses for specifying the database character set and collation:

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]

character_set_database 是單個數據庫級別的 字符集設置,該參數允許我們在同一個 mysqd 下面的不同的 database 使用不同的字符集。

比如:

create database db1 character set utf8mb4 collate utf8mb4_bin;

這就設置了 數據庫 級別的字符集。如果 create database 語句沒有 character 和 collate 參數,那么他們會默認使用:

character_set_server 和 character_collation 的值作為 默認值。

同樣對應有數據庫級別的排序規則參數:

collation_database

4. character_set_client

The character set for statements that arrive from the client. The session value of this variable is set using the character set requested by the client when the client connects to the server. (Many clients support a?--default-character-set?option to enable this character set to be specified explicitly. See also?Section 10.1.4, “Connection Character Sets and Collations”.)

也就是 mysql client 發送 給 mysqld 的語句使用的 編碼字符集。

可以使用 –default-character-set 參數來顯示設置。

5. character_set_connection

The character set used for literals that do not have a character set introducer and for number-to-string conversion.

數字到字符轉換時的編碼字符集。

(用introducer指定文本字符串的字符集:

– 格式為:[_charset] ‘string’ [COLLATE collation]

– 例如:

? SELECT _latin1 ‘string’;

? SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;

– 由introducer修飾的文本字符串在請求過程中不經過多余的轉碼,直接轉換為內部字符集處理。?)

實際中我們一般沒有人去使用 introducer ,所以其實是沒有 introducer,所以都會使用 character_set_connection來編碼的。

6. character_set_results

The character set used for returning query results such as result sets or error messagesto the client.

mysqld 在返回 查詢 結果集 或者錯誤信息到 client 時,使用的編碼字符集。

7. set names ‘xxx’ 命令

可以看到改變的是 character_set_client、character_set_connection、character_set_results

它們都是和 client 相關的。而 真正server端的編碼字符集,character_set_server 和 character_set_database ,set names ‘xxx’ 根本無法修改。

set names ‘xxx’ 命令可以使?character_set_client、character_set_connection、character_set_results 三者統一:

client (character_set_client) —–> character_set_connection ——-> mysqld ?——> client(character_set_results)

減少編碼轉換的需要。

8.?character_set_server 和 character_set_database

二者 的作用其實是相同的,都是設置 字符最終存儲到磁盤時,使用的編碼字符集。只不過 二者設置的級別不一樣而已。character_set_server 設置了 mysqld 級別的存儲編碼字符集,而character_set_database設置 mysqld 中單個 database 的存儲編碼字符集。而且character_set_database的默認值就是 character_set_server 的值。

存在三次編碼轉換過程:

1)mysql client 使用 character_set_client編碼的字符——> character_set_connection 編碼字符

——> mysqld :這里需要從 character_set_connection 編碼格式二進制流解碼成 字符,然后使用 character_set_server/character_set_database 對字符進行再次編碼,生成二進制流,存儲時,就是存儲再次編碼的二進制流數據。

2)讀取數據時,會使用?character_set_server/character_set_database 對讀取到的二級制流進行 解碼成 字符,然后使用 character_set_results 對字符進行二次編碼,生成二進制流,發給 mysql client.

所以 使用 set names ‘xxx’ 命令,結合 character_set_server 參數,可以將 整個過程的 字符集設置成相同的,就不會存在編碼轉換的過程。

9. default-character-set = charset_name 配置參數

Use?charset_name?as the default character set for the client and connection(其實還有 character_set_results).

A common issue that can occur when the operating system uses?utf8?or another multibyte character set is that output from the?mysql?client is formatted incorrectly, due to the fact that the MySQL client uses the?latin1?character set by default. You can usually fix such issues by using this option to force the client to use the system character set instead.

default-character-set 能夠同時指定 client 端 和 connection 的字符,也就是:character_set_client 和 character_set_connection的值,實際上還設置了 character-set-results 的值。

所以 default-character-set 的作用和 set names ‘xxx’ 的作用是一樣的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388874.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388874.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設置Proxy Server和SQL Server實現數據庫安全

首先,我們需要了解一下SQL Server在WinSock上定義協議的步驟: 1. 在”啟動”菜單上,指向”程序/Microsoft Proxy Server”,然后點擊”Microsoft Management Console”。 2. 展開”Internet Information Service”,再展開運行Proxy…

Python django解決跨域請求的問題

解決方案 1.安裝django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS [...corsheaders,...] MIDDLEWARE_CLASSES (...corsheaders.middleware.CorsMiddleware,django.middleware.common.CommonMiddleware, # 注意順序...…

加勒比海兔_加勒比海海洋物種趨勢

加勒比海兔Ok, here’s a million dollar question: is the Caribbean really dying? Or, more specifically, are marine species found on Caribbean reefs becoming less abundant?好吧,這是一個百萬美元的問題:加勒比海真的死了嗎? 或者…

mysql 查出相差年數_MySQL計算兩個日期相差的天數、月數、年數

MySQL自帶的日期函數TIMESTAMPDIFF計算兩個日期相差的秒數、分鐘數、小時數、天數、周數、季度數、月數、年數,當前日期增加或者減少一天、一周等等。SELECT TIMESTAMPDIFF(類型,開始時間,結束時間)相差的秒數:SELECT TIMESTAMPDIFF(SECOND,1993-03-23 0…

tornado 簡易教程

引言 回想Django的部署方式 以Django為代表的python web應用部署時采用wsgi協議與服務器對接(被服務器托管),而這類服務器通常都是基于多線程的,也就是說每一個網絡請求服務器都會有一個對應的線程來用web應用(如Djang…

如果你的電腦是通過代理上網的.就要用端口映射

由于公網IP地址有限,不少ISP都采用多個內網用戶通過代理和網關路由共用一個公網IP上INTERNET的方法, 這樣就限制了這些用戶在自己計算機上架設個人網站,要實現在這些用戶端架設網站,最關鍵的一點是, 怎樣把多用戶的內網…

人口密度可視化_使用GeoPandas可視化菲律賓的人口密度

人口密度可視化GeoVisualization /菲律賓。 (GeoVisualization /Philippines.) Population density is a crucial concept in urban planning. Theories on how it affects economic growth are divided. Some claim, as Rappaport does, that an economy is a form of “spati…

Unity - Humanoid設置Bip骨骼導入報錯

報錯如下: 解決: 原因是biped骨骼必須按照Unity humanoid的要求設置,在max中設置如下: 轉載于:https://www.cnblogs.com/CloudLiu/p/10746052.html

python3openpyxl無法打開文件_Python3 處理excel文件(openpyxl庫)

openpyxl 介紹openpyxl是一個用于讀/寫 XLSX/XLSM/XLTX/XLTM文件的python庫。openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產生的xlsx文件;2007一下的版本為xls后綴的文件,需要使用 xlrd和xlwt庫進行操作。雖然xlrd和xlwt也可以進行文件讀寫&…

Kubernetes - - k8s - v1.12.3 OpenLDAP統一認證

1,基本概念 為了方便管理和集成jenkins,k8s、harbor、jenkins均使用openLDAP統一認證。2,部署openLDAP 根據之前的文檔,openLDAP使用GFS進行數據持久化。下載對應的openLDAP文件git clone https://github.com/xiaoqshuo/k8s-clust…

給程序加殼

在內存中運行可執行程序,好處是可以給程序加殼,加密源程序,靜態反匯編無法獲得PE輸入節,但是因為運行后仍然是獨立的進程,所以沒辦法防止遠程線程注入,掛接API鉤子。 typedef IMAGE_SECTION_HEADER ( * PIM…

srpg 勝利條件設定_英雄聯盟獲勝條件

srpg 勝利條件設定介紹 (Introduction) The e-sports community has been growing rapidly in the past few years, and what used to be a casual pastime has morphed into an industry projected to generate $1.8 B in revenue by 2022. While there are many video games …

[Egret][文檔]遮罩

——遮罩的作用是指定一個顯示對象的可見區域,即這個顯示對象只在這個區域可見。 一、矩形遮罩 將一個矩形對象賦值給顯示對象的 mask 屬性。 shp.mask new egret.Rectangle(20,20,30,50); 【注】:這個矩形的坐標(20,20)和(30,50)是相對于被遮罩對象shp…

clob類型字段最大存儲長度_請教oracle的CLOB字段的最大長度?

CLOB和BLOB都是4G,而LONG ,LONG raw是舊時代的oracle二進制和長文本表示,將來會被廢棄。最長長度是2G.單位是Byte表中單個 LOB 字段 在 9i 版本中可保存 4GB 數據, 在 10g 版本中可保存多達 128TB 的數據.所以理論上是沒限制的ORACLE的數據類型-- ORAC…

JdbcUtil

轉自:https://github.com/ghyg525/util_java_jdbc JdbcUtil.java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; …

機器學習 綜合評價_PyCaret:機器學習綜合

機器學習 綜合評價Any Machine Learning project journey starts with loading the dataset and ends (continues ?!) with the finalization of the optimum model or ensemble of models for predictions on unseen data and production deployment.任何機器學習項目的旅程都…

silverlight 3D 游戲開發

http://www.postvision.net/SilverMotion/DemoTech.aspx silverlight 3D 游戲開發 時間:2010-10-22 06:33來源:開心銀光 作者:黎東海 點擊: 562次意外發現一個silverlight的實時3D渲染引擎。性能比開源那些強很多。 而且支持直接加載maya,3Dmax等主流3D模型文件。 附件附上它的…

redis終端簡單命令

keys * 獲取所有鍵lRange hongbao:44 0 -1獲取該鍵的所有值del hongbao:44 刪除該鍵的所有值 hgetAll user:44 獲取該鍵的所有隊列hget hongbao:44 8 獲取該隊列用戶為8的值hset hongbao:44 7 asdf設置該隊列用戶為7的值hdel user:44 8 刪除該隊列用戶為8的值 flushall 清空red…

python中ix用法_Python中使用ix的數據幀子集

您可以使用X[var2].iloc[[0,1]]:In [280]: X[var2].iloc[[0,1]]Out[280]:0 NaN4 9Name: var2, dtype: float64由于X[var2]是X的視圖,因此X[var2].iloc[[0,1]]對兩者都是安全的訪問和分配。但是如果你使用這種“鏈式索引”要小心模式(例如這里使用的index…

LintCode 16. 帶重復元素的排列

寫在前面:這題和全排列不含重復元素的那題幾乎一樣,我比較垃圾,就用HashSet去掉了重復的元素但是看了九章算法的答案也沒看懂,他寫的很有感覺。 用了hash,本來想著怎么寫hashcode()和equal()方法的,哪知道都…