日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql share 字体 中文_MySQL 存储生僻字/不常见繁体字解决方案(未完全解决)

發布時間:2025/3/21 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql share 字体 中文_MySQL 存储生僻字/不常见繁体字解决方案(未完全解决) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述:

utf-8編碼可能2個字節、3個字節、4個字節的字符,但是MySQL的utf8編碼只支持3字節的數據,而移動端的表情數據和生僻字是4個字節的字符。如果直接往采用utf-8編碼的數據庫中插入表情數據,python程序中將報SQL異常:Traceback?(most?recent?call?last):

File?"/Users/chenxin/Dropbox/python/django/shici/clean_data/export_data.py",?line?101,?in?

export_dynasty("魏晉")

File?"/Users/chenxin/Dropbox/python/django/shici/clean_data/export_data.py",?line?60,?in?export_dynasty

cursor.execute(sql,?tuple(temp_dict.values()))

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/cursors.py",?line?163,?in?execute

result?=?self._query(query)

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/cursors.py",?line?321,?in?_query

conn.query(q)

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/connections.py",?line?505,?in?query

self._affected_rows?=?self._read_query_result(unbuffered=unbuffered)

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/connections.py",?line?724,?in?_read_query_result

result.read()

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/connections.py",?line?1069,?in?read

first_packet?=?self.connection._read_packet()

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/connections.py",?line?676,?in?_read_packet

packet.raise_for_error()

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/protocol.py",?line?223,?in?raise_for_error

err.raise_mysql_exception(self._data)

File?"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pymysql/err.py",?line?107,?in?raise_mysql_exception

raise?errorclass(errno,?errval)

pymysql.err.DataError:?(1366,?"Incorrect?string?value:?'\\xF0\\xA4\\x83\\x83'?for?column?'name'?at?row?1")

可以對4字節的字符進行編碼存儲,然后取出來的時候,再進行解碼。但是這樣做會使得任何使用該字符的地方都要進行編碼與解碼。

utf8mb4編碼是utf8編碼的超集,兼容utf8,并且能存儲4字節的表情字符。

采用utf8mb4編碼的好處是:存儲與獲取數據的時候,不用再考慮表情字符的編碼與解碼問題。

更改數據庫的編碼為utf8mb4:

MySQL的版本

utf8mb4的最低mysql版本支持版本為5.5.3+,若不是,請升級到較新版本。

MySQL驅動

5.1.34可用,最低不能低于5.1.13

修改MySQL配置文件

修改mysql配置文件my.cnf(windows為my.ini)

my.cnf一般在etc/mysql/my.cnf位置。找到后請在以下三部分里添加如下內容:[client]

default-character-set?=?utf8mb4

[mysql]

default-character-set?=?utf8mb4

[mysqld]

character-set-client-handshake?=?FALSE

character-set-server?=?utf8mb4

collation-server?=?utf8mb4_unicode_ci

init_connect=’SET?NAMES?utf8mb4?COLLATE?utf8mb4_unicode_ci’

SET NAMES 'utf8mb4'意思

它相當于下面的三句指令:

SET character_set_client = utf8mb4;

SET character_set_results = utf8mb4;

SET character_set_connection = utf8mb4;

重啟數據庫,檢查變量SHOW?VARIABLES?WHERE?Variable_name?LIKE?'character_set_%'?OR?Variable_name?LIKE?'collation%';

數據如下:鍵值

character_set_clientutf8mb4

character_set_connectionutf8mb4

character_set_databaseutf8mb4

character_set_filesystembinary

character_set_resultsutf8mb4

character_set_serverutf8mb4

character_set_systemutf8

character_sets_dir/www/server/mysql/share/charsets/

collation_connectionutf8mb4_general_ci

collation_databaseutf8mb4_general_ci

collation_serverutf8mb4_general_ci

字段解釋:

系統變量描述character_set_client(客戶端來源數據使用的字符集)

character_set_connection(連接層字符集)

character_set_database(當前選中數據庫的默認字符集)

character_set_results(查詢結果字符集)

character_set_server(默認的內部操作字符集)

以上變量必須是:utf8mb4

mysql的字符集的作用域有三個層級一個數據庫級,一個是表級,一個是列級(字段級別的)。

優先級是:列級>表級>數據庫級。從優先級知道如果存儲偏僻字那個字段不是utf8mb4字符集,那么即使數據庫是utf8mb4也是無濟于事的。

修改數據庫和數據表對應的編碼格式

1. 修改數據庫編碼方式ALTER?DATABASE?database_name?CHARACTER?SET?=?utf8mb4?COLLATE?=?utf8mb4_unicode_ci;

#?修改完可以使用如下命令檢查修改結果:

show?variables?like?'character_set_database';

database_name對應的數據庫名字

2. 修改數據表編碼方式ALTER?TABLE?table_name?CONVERT?TO?CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_unicode_ci;

修改完可以使用如下命令檢查修改數據表的結果:

show?create?table?table_name

table_name對應的數據表的名字

參考:

https://www.itread01.com/content/1543644368.html

https://blog.csdn.net/wxq1075110242/article/details/89308815

總結

以上是生活随笔為你收集整理的mysql share 字体 中文_MySQL 存储生僻字/不常见繁体字解决方案(未完全解决)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。