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

MySQL字符集都有哪些

131次閱讀
沒有評論

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

今天就跟大家聊聊有關 MySQL 字符集都有哪些,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1. 字符集基礎

先了解下 MySQL 字符集都有哪些地方使用,進入數據庫 VARIABLES 參數一目了然:

mysql  SHOW VARIABLES WHERE variable_name LIKE  %character%  OR variable_name LIKE  %collation%  ; +-------------------------------+--------------------------------------+ | 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 | /opt/idc/mysql8.0.23/share/charsets/ | | collation_connection | utf8mb4_bin | | collation_database | utf8mb4_bin | | collation_server | utf8mb4_bin | | default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci | +-------------------------------+--------------------------------------+

從上面 client,connection,database,results 層層環節扣著,任何一個環節的字符集不兼容都會出現亂碼問題。

MySQL8.0 utf8mb4 Unicode 字符集一個新的通用排序歸類,被命名為 utf8mb4_0900_ai_ci。MySQL  8.0 默認的是 utf8mb4_0900_ai_ci,屬于 utf8mb4_unicode_ci 中的一種。

這些字段每個意義,代表著什么含義:

uft8mb4 表示用 UTF-8 編碼方案,每個字符最多占 4 個字節。

utf8mb3 也是 Unicode 字符集的 UTF- 8 編碼,每個字符使用一到三個字節。(utf8: utf8mb3 的別名)

0900 就是 Unicode 校對算法版本。(Unicode 歸類算法是用于比較符合 Unicode 標準要求的兩個 Unicode 字符串的方法)。

ai 指的是口音不敏感。也就是說,排序時 e,egrave;,eacute;,ecirc; 和 euml; 之間沒有區別,不區分重音。

ci 表示不區分大小寫。排序時 p 和 P 之間沒有區別。

再了解一下一些場景下 utf8 和 utf8mb4 的問題點:

utf8 編碼最多支持 3 字節的數據,而 emoji 表情符,偏生字是 4 個字節的 utf8 無法存儲的,致辭延伸出 utf8mb4 字符集解決這個問題。

日常常用的字符集:

utf8mb4_bin:將字符串每個字符用二進制數據編譯存儲,區分大小寫,而且可以存二進制的內

utf8mb4_general_ci:ci 即 case  insensitive,不區分大小寫。沒有實現 Unicode 排序規則,在遇到某些特殊語言或字符集,排序結果可能不一致。但在絕大多數情況下,這些特殊字符的順序并不需要那么精確。

utf8mb4_unicode_ci:是基于標準的 Unicode 來排序和比較,能夠在各種語言之間精確排序,Unicode 排序規則為了能夠處理特殊字符的情況,實現了略微復雜的排序算法。

2. 字符集配置

mysql 字符集如何設置,更改操作:

1)my.cnf 配置文件信息,建議初始化時就設置好。

[mysqld]

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

character-set-client-handshake = FALSE #此處是忽略客戶端的字符集,使用服務器的設置

2)init_connect= lsquo;SET NAMES utf8mb4 rsquo; #服務器為每個連接的客戶端執行的字符串, 對于一些超級管理源就不生效的

3)字符集變更,包含庫,表,column 的變更。都可以完全的擁有自己的字符集。

##更改 DATABASE ALTER DATABASE `db1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ##更改 TABLE ALTER TABLE `t1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ## 更改 column 字段  ALTER TABLE `t1` modify `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT  昵稱

4)日常字符集檢查工作:

SELECT b.SCHEMA_NAME, b.DEFAULT_CHARACTER_SET_NAME, b.DEFAULT_COLLATION_NAME ,a.TABLE_NAME, a.TABLE_COLLATION FROM information_schema.SCHEMATA b left join information_schema.TABLES a on b.SCHEMA_NAME =a. TABLE_SCHEMA WHERE b.SCHEMA_NAME not in (information_schema  , mysql , performance_schema ,  sys) ORDER BY TABLE_SCHEMA,TABLE_NAME ;

通過多方便設置,更改操作,檢查。字符集不再是隱藏問題。

3. 字符集對于數據庫的影響

字符集對整個數據庫影響面還是比較可觀的。庫更改 對于原先存在的表字段 都不影響 依次類推。所以數據庫 表 字段 都可以單獨設置字符集。

常見問題 1:有索引 沒有走 因為進行了 字符集隱式轉換

常見問題 2:在尾隨空格方面不同

字符串值 (CHAR、VARCHAR 和 TEXT) 的比較與其他排序規則在尾隨空格方面不同。For example, lsquo;a rsquo; and a rsquo;   作為不同的字符串比較,而不是相同的字符串。

對于字符集排序來說,字符串末尾的空格也有對應的處理。

mysql  SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM INFORMATION_SCHEMA.COLLATIONS WHERE CHARACTER_SET_NAME =  utf8mb4  +----------------------------+---------------+ | COLLATION_NAME | PAD_ATTRIBUTE | +----------------------------+---------------+ | utf8mb4_general_ci | PAD SPACE | | utf8mb4_bin | PAD SPACE | | utf8mb4_unicode_ci | PAD SPACE | | utf8mb4_icelandic_ci | PAD SPACE | | utf8mb4_latvian_ci | PAD SPACE | | ......... | utf8mb4_0900_ai_ci | NO PAD | | utf8mb4_de_pb_0900_ai_ci | NO PAD | | utf8mb4_0900_bin | NO PAD | +----------------------------+---------------+

注意:在選擇使用 utf8mb4_0900 字符集之后空格 就需要處理。

常見問題 3:對于數據的大小寫敏感

除了 lower_case_table_names 之外,怎樣有效使用大小寫字符集設置,采用 ut8mb4_bin 字符集 既可,查詢和數據插入解決。

常見問題 4:表情符,偏生字

常見錯誤代碼:1366 Incorrect string value: lsquo;\xF0\x9F\x99\x82 rsquo; for column lsquo;name rsquo; at  row 2

指定 Utf8mb4 字符集,再配合 character-set-client-handshake 屬性

備注:對于 jdbc 來說沒有 utf8mb4 這樣的字符集說法。

看完上述內容,你們對 MySQL 字符集都有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計3877字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 潮安县| 延津县| 阿克苏市| 阿坝县| 栾川县| 沐川县| 崇信县| 蒲江县| 景宁| 宜宾县| 微博| 韶山市| 巴林右旗| 山西省| 银川市| 剑川县| 崇阳县| 依兰县| 佛坪县| 汝城县| 澳门| 平舆县| 上思县| 康平县| 炉霍县| 碌曲县| 南通市| 梅州市| 合作市| 达拉特旗| 肥城市| 漳浦县| 宜州市| 广汉市| 枞阳县| 寿阳县| 华安县| 阳曲县| 冕宁县| 合肥市| 鄂伦春自治旗|