欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

教你如何在?MySQL?數(shù)據(jù)庫中支持完整的Unicode

 更新時間:2023年01月06日 15:18:10   作者:火焰兔  
UTF-8?是一種可變寬度編碼,它使用一到四個?8?位字節(jié)對每個符號進(jìn)行編碼,永遠(yuǎn)不要在MySQL中使用?utf8——總是使用?utf8mb4,對mysql支持?Unicode相關(guān)知識感興趣的朋友一起看看吧

在你的數(shù)據(jù)庫中使用 MySQL 的 utf8 字符集嗎? 在這篇文章中,我將解釋為什么你應(yīng)該改用 utf8mb4,以及如何去做。

UTF-8

UTF-8編碼可以表示Unicode字符集中的每一個符號,范圍從到。 那是 1,114,112 個可能的符號。 (并非所有這些 Unicode 代碼點都已分配字符,但這并不妨礙 UTF-8 能夠?qū)λ鼈冞M(jìn)行編碼。)

UTF-8 是一種可變寬度編碼;可以參考Unicode 字符集和 UTF-8、UTF-16、UTF-32 編碼這篇文章 它使用一到四個 8 位字節(jié)對每個符號進(jìn)行編碼。 具有較低數(shù)字代碼點值的符號使用較少的字節(jié)進(jìn)行編碼。 這樣,UTF-8 針對使用 ASCII 字符和其他 BMP 符號(其代碼點范圍從 到 )的常見情況進(jìn)行了優(yōu)化——同時仍然允許星體符號(其代碼點范圍從 到 ) 被存儲。

MySQL 中的 utf8

很長一段時間,我一直在為數(shù)據(jù)庫、表和列使用 MySQL 的 utf8 字符集,假設(shè)它映射到上述 UTF-8 編碼。 通過使用 utf8,我可以在我的數(shù)據(jù)庫中存儲我想要的任何符號——或者我是這么認(rèn)為的。

在寫 JavaScript 的內(nèi)部字符編碼時,我注意到無法將 符號插入到該站點后面的 MySQL 數(shù)據(jù)庫中。 我嘗試更新的列具有 排序規(guī)則,并且連接字符集設(shè)置為 utf8。

mysql> SET NAMES utf8; # just to emphasize that the connection charset is set to `utf8`
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE database_name.table_name SET column_name = 'foo??bar' WHERE id = 9001;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> SELECT column_name FROM database_name.table_name WHERE id = 9001;
+-------------+
| column_name |
+-------------+
| foo         |
+-------------+
1 row in set (0.00 sec)

內(nèi)容在第一個 符號處被截斷,在本例中為 — 因此,嘗試插入 實際上插入的是 ,導(dǎo)致數(shù)據(jù)丟失(并可能引入安全問題;見下文)。 MySQL 也返回一條警告消息:

mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level   | Code | Message                                                                      |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

事實證明,MySQL 的 utf8 字符集僅部分實現(xiàn)了正確的 UTF-8 編碼。 它只能存儲由一到三個字節(jié)組成的 UTF-8 編碼符號; 不支持占用四個字節(jié)的編碼符號。

由于星體符號(其代碼點范圍從 到 )在 UTF-8 中均由四個字節(jié)組成,因此我們不能使用 MySQL 的 utf8 實現(xiàn)來存儲它們。

這不僅會影響 字符,還會影響更重要的符號,例如 。 總共有 1,048,575 個可能的代碼點是我們不能使用的。 事實上,MySQL 的 utf8 只允許我們存儲所有可能的 Unicode 代碼點的 5.88% 。 正確的 UTF-8 可以編碼所有 Unicode 代碼點的 100% 。

MySQL 中的 utf8mb4

幸運(yùn)的是,MySQL 5.5.3(2010 年初發(fā)布)引入了一種名為 utf8mb4 的新編碼,它映射到正確的 UTF-8,因此完全支持 Unicode,包括星體符號。

我們可以參考 MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci

總結(jié)

永遠(yuǎn)不要在 MySQL 中使用 utf8——總是使用 utf8mb4。 更新數(shù)據(jù)庫和代碼可能需要一些時間,但絕對值得付出努力。 為什么要任意限制可以在數(shù)據(jù)庫中使用的符號集? 為什么每次用戶輸入星體符號作為評論或消息的一部分或我們存儲在數(shù)據(jù)庫中的任何內(nèi)容時,都會丟失數(shù)據(jù)? 沒有理由不在所有地方爭取完全的 支持。 做正確的事,使用 utf8mb4。

到此這篇關(guān)于如何在 MySQL 數(shù)據(jù)庫中支持完整的 Unicode的文章就介紹到這了,更多相關(guān)mysql支持 Unicode內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Mysql連接數(shù)據(jù)庫時host和user的匹配規(guī)則

    淺談Mysql連接數(shù)據(jù)庫時host和user的匹配規(guī)則

    這篇文章主要介紹了淺談Mysql連接數(shù)據(jù)庫時host和user的匹配規(guī)則,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • MYSQL常見出錯代碼對照

    MYSQL常見出錯代碼對照

    MYSQL常見出錯代碼對照...
    2007-07-07
  • MySQL表的內(nèi)外連接和視圖使用實戰(zhàn)練習(xí)

    MySQL表的內(nèi)外連接和視圖使用實戰(zhàn)練習(xí)

    這篇文章主要給大家介紹了關(guān)于MySQL表的內(nèi)外連接和視圖使用的相關(guān)資料,MySQL的內(nèi)外連接查詢是用于將兩個或多個表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)查詢的一種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • mysql5.7.17安裝使用圖文教程

    mysql5.7.17安裝使用圖文教程

    這篇文章主要為大家詳細(xì)介紹了MySql安裝與使用圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • MySQL中索引的定義以及操作新手教程

    MySQL中索引的定義以及操作新手教程

    索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),在關(guān)系數(shù)據(jù)庫中,索引是一種與表有關(guān)的數(shù)據(jù)庫結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于MySQL中索引的定義以及操作的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • mysql時間戳格式化函數(shù)from_unixtime使用的簡單說明

    mysql時間戳格式化函數(shù)from_unixtime使用的簡單說明

    mysql中的FROM_UNIXTIME函數(shù)可以數(shù)據(jù)庫中整型類的時間戳格式化為字符串的日期時間格式,下面這篇文章主要給大家介紹了關(guān)于mysql時間戳格式化函數(shù)from_unixtime使用的簡單說明,需要的朋友可以參考下
    2022-08-08
  • MySQL窗口函數(shù)OVER()用法及說明

    MySQL窗口函數(shù)OVER()用法及說明

    這篇文章主要介紹了MySQL窗口函數(shù)OVER()用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql的查詢否定語句有哪些

    mysql的查詢否定語句有哪些

    MySQL查詢否定語句是一個非常有用的工具,可以幫助我們輕松應(yīng)對復(fù)雜的查詢需求。在使用否定語句時,需要注意語法和性能方面的問題,以確保查詢結(jié)果的準(zhǔn)確性和效率。
    2023-10-10
  • 解析mysql 緩存如何使用內(nèi)存

    解析mysql 緩存如何使用內(nèi)存

    本篇文章是對mysql中的緩存如何使用內(nèi)存進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • mysqldump數(shù)據(jù)庫備份參數(shù)詳解

    mysqldump數(shù)據(jù)庫備份參數(shù)詳解

    這篇文章主要介紹了mysqldump數(shù)據(jù)庫備份參數(shù)詳解,需要的朋友可以參考下
    2014-05-05

最新評論