最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

UTF-8

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

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

MySQL 中的 utf8

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

在寫 JavaScript 的內(nèi)部字符編碼時(shí),我注意到無法將 符號(hào)插入到該站點(diǎn)后面的 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)容在第一個(gè) 符號(hào)處被截?cái)啵诒纠袨?— 因此,嘗試插入 實(shí)際上插入的是 ,導(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)

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

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

這不僅會(huì)影響 字符,還會(huì)影響更重要的符號(hào),例如 。 總共有 1,048,575 個(gè)可能的代碼點(diǎn)是我們不能使用的。 事實(shí)上,MySQL 的 utf8 只允許我們存儲(chǔ)所有可能的 Unicode 代碼點(diǎn)的 5.88% 。 正確的 UTF-8 可以編碼所有 Unicode 代碼點(diǎn)的 100% 。

MySQL 中的 utf8mb4

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

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

總結(jié)

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

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

相關(guān)文章

  • mysql日常使用中常見報(bào)錯(cuò)大全

    mysql日常使用中常見報(bào)錯(cuò)大全

    MySQL初學(xué)者新安裝好數(shù)據(jù)庫及使用過程中經(jīng)常遇到以下幾類錯(cuò)誤,本文給大家詳細(xì)整理并給出完美解決方案,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • Mysql GTID Mha配置方法

    Mysql GTID Mha配置方法

    下面小編就為大家?guī)硪黄狹ysql GTID Mha配置方法。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    這篇文章主要介紹了zabbix--監(jiān)控MySQL主從狀態(tài)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • MySql死鎖怎么排查的方法實(shí)現(xiàn)

    MySql死鎖怎么排查的方法實(shí)現(xiàn)

    本文主要介紹了MySql死鎖怎么排查的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • MySQL使用IF函數(shù)動(dòng)態(tài)執(zhí)行where條件的方法

    MySQL使用IF函數(shù)動(dòng)態(tài)執(zhí)行where條件的方法

    這篇文章主要介紹了MySQL使用IF函數(shù)來動(dòng)態(tài)執(zhí)行where條件,詳細(xì)介紹了IF函數(shù)在WHERE條件中的使用,MySQL的IF()函數(shù),接受三個(gè)表達(dá)式,如果第一個(gè)表達(dá)式為true,而不是零且不為NULL,它將返回第二個(gè)表達(dá)式,需要的朋友可以參考下
    2022-09-09
  • SQL實(shí)現(xiàn)LeetCode(183.從未下單訂購的顧客)

    SQL實(shí)現(xiàn)LeetCode(183.從未下單訂購的顧客)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(182.從未下單訂購的顧客),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Mysql inner join on的用法實(shí)例(必看)

    Mysql inner join on的用法實(shí)例(必看)

    下面小編就為大家?guī)硪黄狹ysql inner join on的用法實(shí)例(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • MySQL中SHOW TABLE STATUS的使用及說明

    MySQL中SHOW TABLE STATUS的使用及說明

    這篇文章主要介紹了MySQL中SHOW TABLE STATUS的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解數(shù)據(jù)庫_MySQL: mysql函數(shù)

    詳解數(shù)據(jù)庫_MySQL: mysql函數(shù)

    這篇文章主要介紹了數(shù)據(jù)庫_MySQL: mysql函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MySQL常用存儲(chǔ)引擎功能與用法詳解

    MySQL常用存儲(chǔ)引擎功能與用法詳解

    這篇文章主要介紹了MySQL常用存儲(chǔ)引擎功能與用法,較為詳細(xì)的分析了mysql存儲(chǔ)引擎的分類、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04

最新評(píng)論

孟州市| 龙州县| 周至县| 蕉岭县| 咸阳市| 田阳县| 陆良县| 鹿邑县| 青州市| 尚志市| 铁力市| 农安县| 乌什县| 三台县| 襄樊市| 嫩江县| 米脂县| 安龙县| 错那县| 漯河市| 淮安市| 冕宁县| 荣昌县| 通河县| 来凤县| 宽甸| 宁陕县| 黄冈市| 灯塔市| 依兰县| 宜春市| 增城市| 青神县| 木兰县| 台州市| 宜兰县| 兴安县| 托克逊县| 壤塘县| 镇坪县| 渝中区|